Compiler fehler treibt mich zur verzweiflung!!!



  • Hallo,
    erstma den Sourcecode(einigen könnte er beknnat vorkommern, da er nur eine abgeänder Version von dem ist, über dem ich in einen vorherigen thread schon gescrieben hab):

    client.h

    #ifndef CLIENT_H
    #define CLIENT_H
    
    #include <TCP-Klassen/tcpclient.h>
    
    /**
      *@author Kante
      */
    
    class Client : public TcpClient  {
    public:
      Client();
      Client(char* ip);
      Client(char* ip, int p);
      void action();
    
      void sendMsg(char* a, int length);
    };
    
    #endif
    

    client.cpp

    include "client.h"
    
    Client::Client() : TcpClient() {;}
    Client::Client(char* ip)  : TcpClient(ip) {;}
    Client::Client(char* ip, int por) : TcpClient(ip, por) { ;}
    ~Client() {;}
     void Client::action()
      { }
    
     void Client::sendMsg(char* a, int length)
    {
    	if (write(sock, a, lenth) < 0)
    	{ cout << "Fehler beim senden!" << endl;}
    	else
    	{ cout << "gesendet!" << endl;}
    }
    

    main.h

    #include "client.h"
    
    int main(int argc, char *argv[])
    {
    
     Client c();
     c.initClient();
      return 0;
    }
    

    Nun noch der Compiler fehler:

    main.cpp: In function `int main(int, char**)':
    main.cpp:24: error: request for member `initClient' in `c()', which is of
       non-aggregate type `Client ()()'
    

    Nur versteh ich nich warum der Compiler das sagt, da Client doch eine Klasse ist und somit ein "aggragate type" sein müste, oder?
    Wenn ich das Objelt als pointer auf dem Heap mittels new erzeuge, kommt der Fehler der in dem anderen Thread beschrieben ist also mit "undefind reference...". Dort ist im übrigen auch die Klasse TcpClient aufgeführt: http://www.c-plusplus.net/forum/viewtopic-var-t-is-158120.html
    Bitte helft mir, ich verzwifle langsam
    mdg Kante



  • int main(int argc, char *argv[])
    {
      //Client c(); // Deklaration der Funktion "c"
      Client c;   // Was du eigentlich wolltest
      c.initClient();
      return 0;
    }
    


  • hey,
    danke aber das fand ich auch schon bei google (aber konnte ja keiner wissen).
    dann funktionierts auch ich, denn dan kommt:

    /tmp/ccMHXBNP.o(.text+0x19): In function `main':
    : undefined reference to `Client::Client[in-charge]()'
    /tmp/ccMHXBNP.o(.gnu.linkonce.t._ZN6ClientD1Ev+0xb): In function `Client::~Client [in-charge]()':
    : undefined reference to `vtable for Client'
    /tmp/ccMHXBNP.o(.gnu.linkonce.t._ZN6ClientD1Ev+0x16): In function `Client::~Client [in-charge]()':
    : undefined reference to `TcpClient::~TcpClient [not-in-charge]()'
    collect2: ld returned 1 exit status
    

    womit ich wider beim anfang wäre (siehe den oben erwähnten anderen thread)
    hast du vlt noch ne andere idee?
    bin für jede hilfe dankbar
    mfg Kante



  • Punkt 1 (sicher): ~Client() {;} tut sehr sehr wenig - weil in der Klasse Client kein ~Client(); deklariert ist und weil die Definition Client::~Client() {} heissen müsste

    Punkt 2 (vermutlich): Du hast vergessen, die Bibliothek des TcpClient dazu zu linken.



  • hey,
    hab den Fehler gefunden 🙂 🙂 🙂
    nachdem ich alle #include-Anweisungen für die Basisklassen (also #include <tcpclient.h> in tcpclient.cpp sowie #include <tcptemplate.h> in tcptemplate.cpp)
    das it den nicht dazulinken von LordJaxon hat mich drauf gebracht,
    so jetz hab ich nen dringendes bedürfnis mich mit makefiles auseinader zu setzen
    vielen dank für eure mühen
    mfg Kante


Anmelden zum Antworten