конфликт имен функций в переполнении стека

Класс 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 конфликт функций. Я знаю, что я могу создать обертку для bind в sys/socket.h, Есть ли изящные и более простые способы разрешения конфликта?

Спасибо

5

Решение

Просто уточните звонок:

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

Это скажет компилятору искать функцию с именем bind в глобальном пространстве имен — я предполагаю, что bind() действительно живет в глобальном пространстве имен; если это не так, вы должны указать имя пространства имен, в котором он находится, перед оператором разрешения области видимости (::).

15

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]