[C/C++] Vererbung: Nicht erreichbare Basis

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Chillikid, 1. März 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 1. März 2009
    Vererbung: Nicht erreichbare Basis

    Hallo ihr,

    ich schreibe gerade (mal wider) an einer Socket-Klasse und habe das über Vererbung ein bisschen abstrakter gemacht. Allerdings habe ich ein Problem beim Zugriff auf die Methoden der Basisklasse.

    Erstmal zum Code:

    Meine Basisklasse
    Code:
    class TCPSocket {
     protected:
     int sock_descriptor;
     timeval t_out;
    
     bool readReady();
     bool writeReady();
    
     public:
     TCPSocket(int tSecs, int tUSecs);
    
     bool connect(const char *ipAddr, int port);
     bool close();
    
     bool sendAll(const char *msg);
     bool recvAll(stringstream *out);
    };
    Meine abgeleitete Klasse
    Code:
    class HTTPSocket : TCPSocket {
     private:
     string recvLine();
    
     public:
     HTTPSocket(int tSecs, int tUSecs);
     bool recvAll(HTTPResponse *res);
     bool sendAll(HTTPRequest *req);
    };
    Und in der main Funktion wollte ich jetzt zum Test ein connect() ausführern:
    Code:
    HTTPSocket sock(2, 500);
    ...
    sock.connect(host.c_str(), port);
    Dabei bekomme ich dann folgende Fehler:
    Fehler: »bool TCPSocket::connect(const char*, int)« ist unzugänglich
    Fehler: »TCPSocket« ist keine erreichbare Basis von »HTTPSocket«

    Kann mir da jemand helfen?

    Chillikid
     

  2. Anzeige
  3. #2 1. März 2009
    AW: Vererbung: Nicht erreichbare Basis

    Das problem liegt hier:
    Code:
    class HTTPSocket : TCPSocket {
    Du hast hier kein Zugriffsspezifizierer angegeben, d.h. es wird automatisch eine private Vererbung gemacht. Das wiederum bedeutet, du hast keinen Zugriff auf die Basisklasse.

    Was du brauchst, ist eine public-Vererbung (standard normalerweiße):
    Code:
    class HTTPSocket : public TCPSocket {
     
  4. #3 1. März 2009
    AW: Vererbung: Nicht erreichbare Basis

    Stimmt pyro, vielen Dank. Hatte ich übersehen.

    ~close~
     

  5. Videos zum Thema
Die Seite wird geladen...