B类继承自A类.A类具有名为的虚函数bind.
Class A {
virtual void bind();
}
class B: public A {
B();
}
Run Code Online (Sandbox Code Playgroud)
在B的构造函数中,它使用bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)函数from <sys/socket.h>.
#include <sys/socket.h>
B::B () {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in server_addr, client_addr;
if(sockfd < 0)
perror("ERROR opening socket.\n");
bzero((char*)&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = 2333;
if(bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
perror("ERROR on binding.\n");
listen(sockfd, 1);
}
Run Code Online (Sandbox Code Playgroud)
编译器抛出错误,说两个bind函数冲突.我知道我可以为bindin 创建一个包装器sys/socket.h.是否有任何优雅而简单的方法来解决冲突?
谢谢
And*_*owl 16
只要符合电话的要求:
if (::bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
// ^^
Run Code Online (Sandbox Code Playgroud)
这将告诉编译器查找bind在全局命名空间中调用的函数- 我假设它bind()确实存在于全局命名空间中; 如果没有,那么您应该在范围解析运算符(::)之前指定它所在的命名空间的名称.