调用成员C ++函数但C函数具有相同的名称

时间:2015-11-03 21:40:47

标签: c++ c function namespaces member

我正在使用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

3 个答案:

答案 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
}