#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);
}