我有一个带有read函数的C ++ File类,它应该将文件的整个内容(就像Python一样)读入缓冲区。但是,当我尝试从unistd.h调用read函数时,我得到:
file.cpp:21:错误:没有匹配函数来调用'File :: read(int&,char *&,int)'
file.cpp:17:注意:候选人是:char * File :: read()
我做错了什么?这些有完全不同的签名,为什么我不能简单地称它?
答案 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"
的任何符号冲突。