使用具有相同方法的类在C ++中调用非成员函数

我有一个名为open的实例方法,需要调用在C中声明的函数,也称为open 。 关注样本:

void SerialPort::open() { if(_open) return; fd = open (_portName.c_str(), O_RDWR | O_NOCTTY ); _open = true; } 

当我尝试编译它(使用GCC)时,我收到以下错误:

 error: no matching function for call to 'SerialPort::open(const char*, int)' 

我包括了所有必需的C头。 当我更改方法的名称,例如open2时,我没有编译问题。

我怎么解决这个问题。 提前致谢。

呼叫

 fd = ::open(_portName.c_str(), O_RDWR | O_NOCTTY ); 

函数名前面的双冒号( ::是C ++的作用域解析运算符 :

如果解析运算符位于变量名称前面,则全局变量会受到影响。

::open而不是open::前缀表示该名称应取自全局范围。 (全局命名空间?我不确定它的确切含义,说实话……)

open (_portName.c_str(), O_RDWR | O_NOCTTY );之前添加“::” open (_portName.c_str(), O_RDWR | O_NOCTTY );

确保:

1)如果调用的函数和函数位于不同的名称空间(包括父名称空间),则使用名称空间解析

2)如果上面定义了调用函数,则调用函数在调用函数之前声明函数。 例如:

  void bar(); void foo() { bar(); } void bar() { .... }