我正在 Unix 上对串行端口进行编程,并且我正在使用头文件unistd.h. 它包含以下功能:
read(int fd, void *buf, size_t count)
Run Code Online (Sandbox Code Playgroud)
我正在创建一个类来调用这个函数,我的类中的一个方法也被调用read()来读取一个字符。但是当我编译时,它说它无法read()从unistd.h. 如果我使用 C++,我可以添加::来解决库冲突。在使用 C++ 和调用 C 库函数时如何解决库冲突?
稍后当开发人员使用我的库时,它会简单而整洁,如下所示:
Serial serial;
serial.read();
Run Code Online (Sandbox Code Playgroud)
我的类名是Serial并且包含方法read(),该方法本身read()从调用函数unistd.h。
如果我使用 C++,我可以添加
::来解决库冲突。
但是,你正在使用C ++。仅仅因为您包含一个包含 C API 的标头,并不意味着翻译单元不再是 C++ 翻译单元。如果头文件设计为与 C++ 兼容,那么它的内容仍然放在全局命名空间中(并且unistd.h 可以很好地包含在 C++ 翻译单元中)。
这意味着::read将解析为由unistd.h. 您可以在Serial::read. 这些是 C++ 编译器的不同功能。只需消除成员函数内的名称的歧义,因为非限定名称查找必须在类范围内找到成员。
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |