c - 如何解析同名的 C++ 成员函数与 C 函数?

标签 c sockets

我在 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/

相关文章:

ruby - 如何在 Ruby 中建立启用 SSL 的 TCP/IP 连接

c - 在文件上使用 mmap

c - 如果 block 的大小不是 4 的倍数,为什么 efence 无法检测到越界

c - GCC - 初始化程序周围缺少大括号

c - recv() 套接字函数返回长度为 0 的数据

c# - 在 .NET 中从 NetworkStream 读取的正确方法是什么

c - 用于查找局部最大值的 C 库?

c++ - 将未对齐的 double 加载到 _m128d 寄存器

c# - Socket.Send,服务器收到很多无效的 MPacket

c# - 如何检测套接字断开连接?