我正在使用C libtrary
#define read _io_read
但我有一个继承成员函数'read'的C ++类。 我试图从另一个成员函数调用成员函数但是 编译器认为我试图在全局范围内调用C函数。
我尝试了以下
//header
namespace myNameSpace{
class B : public A{
int read();
int do_read();
}
}
//cpp
using namespace myNameSpace;
int B::read(){
//other code needed
_io_read();
}
int B::do_read(){
this.read(); // here is where compiler resolves to _io_read
}
周围有吗?我宁愿不重命名基类A的读取函数,因为我无法更改不属于我的代码。
TIA
答案 0 :(得分:2)
您可以使用:
int B::do_read(){
#undef read
this.read(); // here is where compiler resolves to _io_read
#define read _io_read
}
答案 1 :(得分:0)
我会修改答案:在你的模块中,你可以将所有违规的#defines重新定义为不那么模糊的东西。例如,如果#defined C例程来自libquux,则可以编辑quux.h以重新定义它们:
/*#define read _io_read*/
#define quux_read _io_read
唉,普通的CPP,你的宏观能力并没有那么好。
答案 2 :(得分:0)
我将它放在.cpp文件的开头,并将删除不再需要的命名空间。很抱歉将#define描述为全局范围,仍在学习正确的命名法:)
#ifdef read
#undef read
#endif
int B::read(){
//other code needed
_io_read(); //call C function directly
}
int B::do_read(){
this.read(); //no more problem here
}