[英]Calling in C++ a non member function inside a class with a method with the same
我有一个名为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()
{
....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.