cpp 套接字,继承错误

cpp Socket, inheritage error

本文关键字:错误 继承 套接字 cpp      更新时间:2023-10-16

我创建一个套接字类,该套接字类具有用于创建不同类型的套接字(客户端和服务器)的静态成员。这是界面:

    class Socket{
    public:
        int sendData(std::string _data);
        std::string receiveData();
        int closeSocket();
    protected:      
        Socket();
        virtual int initializeSocket() = 0;
        virtual int connectSocket() = 0;

    public:     // static members: Factory, etc.
        static Socket* createClientSocket(std::string _ip, std::string _port);
        static Socket* createServerSocket(std::string _port);
    protected:  
        WSADATA mWsaData;
        SOCKET mSocket;
        addrinfo *mResult, mHints;

这些孩子是:

-

->服务器:

    class ServerSocket: public Socket{
    private:
        ServerSocket(const std::string _port);
        ~ServerSocket();
        int acceptClient();
    private:
        SOCKET mClientSocket;
        std::string mPort;
    };  //  class ServerSocket
-

-> 客户端:

    class ClientSocket: public Socket{
    private:
        ClientSocket(const std::string _ip, const std::string _port);
        ~ClientSocket();
    private:
        addrinfo *mPtr;
        std::string mServerIp, mServerPort;
    };  //  class ClientSocket

但是在实现 initializeSocket 和其他成员时,我收到错误"不允许继承的成员。就我而言,继承的阶级可以进入父亲阶级的公共和受保护的memb。为什么会出现此错误?

提前致谢:)

编辑:该错误出现在许多成员中,例如在ServerSocket中.cpp

int ServerSocket::initializeSocket(){  <<--- HERE in the name of the function appears 
    // Resolve the server address and port
    int iResult = getaddrinfo(NULL, mPort.c_str(), &mHints, &mResult);
    if ( iResult != 0 ) {
        printf("getaddrinfo failed with error: %dn", iResult);
        WSACleanup();
        return 1;
    }
    //..... ETC....
    freeaddrinfo(mResult);
    iResult = listen(mSocket, SOMAXCONN);
    if (iResult == SOCKET_ERROR) {
        printf("listen failed with error: %dn", WSAGetLastError());
        closesocket(mSocket);
        WSACleanup();
        return 1;
    }
    return 0;
   }

我写"<<- 这里..."

1>....sourcecorecommServerSocket.cpp(37): error C2509: 'initializeSocket' : member function not declared in 'BOViL::comm::ServerSocket'
1>          c:programmingbovilsourcecorecommServerSocket.h(18) : see declaration of 'BOViL::comm::ServerSocket'

错误在于派生类未在其声明中声明成员函数。

    class ClientSocket: public Socket{
    public:
        int sendData(std::string _data);  <<--- Add this
    private:
        ClientSocket(const std::string _ip, const std::string _port);
        ~ClientSocket();
        int initializeSocket(); <<--- Add this
        int connectSocket();  <<--- Add this
    private:
        addrinfo *mPtr;
        std::string mServerIp, mServerPort;
    };  //  class ClientSocket

以此类推