Я получил класс сервера в 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. Однако я не уверен, будет ли конфликтовать, если другие файлы содержат эти системные заголовки, или какие-то другие проблемы Любое предложение, кроме изменения имени?