我在 server.h 中有一个服务器类:
namespace tcp{
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
class Server{
private:
int listener; //socket fd
public:
/* ...... */
void run();
int listen();
/* ...... */
}
}
在 server.cpp 中:
usinge namespace tcp;
void Server::run(){
/* ...do something to get socket for listening...*/
listen();
/* ...do something else...*/
}
int Server::listen(){
if (listen(listener, 10) == -1){
perror("listen");
exit(3)
}
}
编译器无法区分 Server::listen() 调用和 listen() 系统调用。我的解决方案是将 #include
指令包装在命名空间 std 中。但是,我不确定如果其他文件包含那些系统头文件或其他一些问题是否会发生冲突。除了改名还有什么建议吗?
最佳答案
在 C 版本前加上 ::
即
if (::listen(listener, 10) == -1) {
...
}
即使用全局命名空间。
关于c - 如何解析同名的 C++ 成员函数与 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445251/