标准POSIX读取由具有不同签名的读取方法遮蔽

时间:2009-07-18 19:07:04

标签: c++ shadows unistd.h

我有一个带有read函数的C ++ File类,它应该将文件的整个内容(就像Python一样)读入缓冲区。但是,当我尝试从unistd.h调用read函数时,我得到:

  

file.cpp:21:错误:没有匹配函数来调用'File :: read(int&,char *&,int)'

     

file.cpp:17:注意:候选人是:char * File :: read()

我做错了什么?这些有完全不同的签名,为什么我不能简单地称它?

2 个答案:

答案 0 :(得分:4)

您是否尝试明确了范围;

char* File::read()
{
   // Double-colon to get to global scope
   ::read(...);
   // ..
}

答案 1 :(得分:2)

read方法的posix标准版本的定义定义为extern "C"。这是必要的,因此读取符号不会被C ++编译器破坏,并链接到库中的正确函数。混合和匹配C和C ++符号将产生不可预测的结果。如果可能,重命名c ++函数,以免与声明为extern "C"的任何符号冲突。