6

B 类继承自 A 类。A 类有一个名为 的虚函数bind

Class A {
  virtual void bind();
}

class B: public A {
  B();
}

在 B 的构造函数中,它使用bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)来自 的函数<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);
}

编译器抛出错误,指出这两个bind函数冲突。我知道我可以为 in 创建一个包装bindsys/socket.h。是否有任何优雅和更简单的方法来解决冲突?

谢谢

4

1 回答 1

18

只需限定调用:

if (::bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
//  ^^

这将告诉编译器查找bind在全局命名空间中调用的函数——我假设它bind()确实存在于全局命名空间中;::如果没有,那么您应该在范围解析运算符 ( )之前指定它所在的命名空间的名称。

于 2013-05-22T07:59:42.890 回答