Klasy B dziedziczą z klasy A. Klasa A ma funkcję wirtualną o nazwie bind
.Konflikt nazwy funkcji w C++
Class A {
virtual void bind();
}
class B: public A {
B();
}
W konstruktora B używa bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
funkcję z <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);
}
Kompilatory zgłaszają błędy, informując, że dwie funkcje są sprzeczne z bind
. Wiem, że mogę utworzyć wrapper dla bind
w sys/socket.h
. Czy istnieją jakieś eleganckie i łatwiejsze sposoby rozwiązania konfliktu?
Dzięki
należy spróbować :: bind (sockfd, (struct sockaddr *) & server_addr, sizeof (server_addr) aby uzyskać dostęp do globalnego wiążą –
Więcej o 'rozdzielczość zakres podmiot gospodarczy http://en.wikipedia.org/wiki/Scope_resolution_operator – Cyclonecode