3

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

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

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

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

4

2 回答 2

6

您是否尝试过明确范围?

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

?

于 2009-07-18T19:25:58.297 回答
2

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

于 2009-07-18T19:30:51.907 回答