C++,库函数和固有类函数之间存在冲突


#include <iostream>
#include <unistd.h>
using namespace std;
class A{
public:
bool close(){ return true; }
};
class B: public A{
public:
void fun(){
(void) close(1);
}
};
int main() {
B b;
b.fun();
return 0;
}

在类B中,我想调用库unistd.h中的函数close(1(。FYI:close(int-fileDes(用于关闭进程中的文件描述符。

那么如何克服这个问题。我得到以下错误:

source.cpp: In member function 'void B::fun()':
source.cpp:11:27: error: no matching function for call to 'B::close(int)'
11 |             (void) close(1);
|                           ^
source.cpp:6:14: note: candidate: 'bool A::close()'
6 |         bool close(){ return true; }
|              ^~~~~
source.cpp:6:14: note:   candidate expects 0 arguments, 1 provided

那么如何克服这个问题,让它调用unistd.h文件中的函数。

在成员函数fun的范围内,在类的范围内搜索作为非限定名称的名称close

void fun(){
(void) close(1);
}

事实上,基类中还有另一个成员函数close具有这样的名称。

所以编译器选择了这个函数。

如果要使用命名空间中的函数,请使用限定名称,例如

void fun(){
(void) ::close(1);
}

相关内容

  • 没有找到相关文章

最新更新