nicht aufgelöstes externes symbol



  • hey,

    ich habe hier ein projekt mit zwei klassen. jetzt meckert der linker aber, dass es von der einen klasse lauter nicht aufgelöste externe symabole gibt.

    die klassen gehören ganz normal zum projekt, es gibt klasse1.h, klasse1.cpp und klasse2.h, klasse2.cpp. es scheint so, als würde er die .cpp datei von klasse 2 gar nicht finden wo die ganzen implementierungen drin sind, hat jmd eine idee woran das liegen kann?



  • Hallo.

    Mein Instinkt sagt mir, du verwendest templates und trennst die Deklarationen von den Definitionen. Aber du könntest ja mal deine Klassen posten.

    gruß
    syntax



  • @symboll
    Gib bloss Acht dass du nicht zu viele Informationen hergibst, nachher fehlen die dir noch!
    einself



  • Nein, keine Templates. Einfach so (beispielsweise):

    Klasse1.h
    
    class Klasse1 {
    
      public:
    
        Klasse();
        ~Klasse();
    
        void method1();
        void method2();
    };
    
    Klasse1.cpp
    
    Klasse::Klasse() {
      // tue etwas
    }
    
    Klasse::~Klasse() {
      // tue etwas
    }
    
    void Klasse::method1() {
      //tue etwas
    }
    
    void Klasse::method2() {
      //tue etwas
    }
    

    Und dann sagt der Linker, das er die ganzen implementierten Methoden nicht findet. Das komische ist, das ich die gleiche Klasse auch in einem anderen Projekt benutze und da funktioniert alles.


  • Mod

    Deine Klasse heißt einmal Klasse , ein anderes Mal Klasse1 . Aber ich nehme an, das liegt da dran, dass du gar keine Hilfe willst.



  • symboll schrieb:

    (beispielsweise)

    Wie du merkst, sind Beispiele nicht so gut geeignet, wenn man sie nicht ganz genau macht. Gekürzter, echter Code (der den Fehler noch aufweist) wäre sinnvoller.



  • Lies dir mal folgendes aufmerksam durch:

    http://www.c-plusplus.net/forum/200753
    http://www.c-plusplus.net/forum/304133
    http://www.c-plusplus.net/forum/246875

    Und danach stell deine Frage nochmal so, dass man dir auch antworten kann - wenn es überhaupt noch nötig sein sollte.



  • Tut mir Leid, Problem ist, dass ich den Code nicht so ohne weiteres veröffentlichen kann.

    Daher das hier:

    http://www1.xup.in/exec/ximg.php?fid=19043786

    Das Problem mit den nicht aufgelösten Symbolen tritt bei der Socket-Klasse auf.
    In der Socket.cpp sind alle Methoden korrekt implementiert, funktioniert ja auch in anderen Projekten, nur hier irgendwie nicht.



  • Wird gar keine Socket-Methode gefunden? Oder nur die, bei denen du Socket:: vergessen hast?

    Zeig doch mal eine Fehlermeldung.



  • Ok ich komme mir gerade richtig bescheuert vor - vergessen die wsock32.lib dazuzulinken.



  • symboll schrieb:

    Tut mir Leid, Problem ist, dass ich den Code nicht so ohne weiteres veröffentlichen kann.

    Uh, sitzt du an deinem eigenen kleinen "streng geheimen Projekt"? Oder ist es Firmencode? In dem Fall sollte das beschriebene reduzieren des Codes den so weit verkrüppeln, dass man eh nicht mehr drauf schließen kann, was deine Firma grade macht. Wenn du den Variablen dann auch noch Namen gibst, die nicht auf dein Projekt schließen lassen, sollte das reichen. Du sollst uns ja nicht den kompletten Code liefern, den würde eh keiner lesen.

    symboll schrieb:

    http://www1.xup.in/exec/ximg.php?fid=19043786

    Der Link lädt nur ne Ewigkeit, es passiert und zeigt sich nichts bei mir. => reduzierter Code bitte.

    In der Socket.cpp sind alle Methoden korrekt implementiert, funktioniert ja auch in anderen Projekten,

    Dass es in anderen Projekten funktioniert heißt nicht, dass es korrekt implementiert wurde, nur, dass in den anderen Projekten bisher keine Fehler aufgetreten sind.

    symboll schrieb:

    Das Problem mit den nicht aufgelösten Symbolen tritt bei der Socket-Klasse auf.

    Nein, das tritt beim Linken auf. Das hat nichts mit der Klasse zu tun, sondern damit, dass dem Linker etwas fehlt. Lies dir den dritten Link nochmal durch...



  • peinlich schrieb:

    Ok ich komme mir gerade richtig bescheuert vor

    in dem Fall zu recht 😛

    peinlich schrieb:

    vergessen die wsock32.lib dazuzulinken.

    Mit der Fehlermeldung im ersten Post hättest du die Antwort schon im zweiten Post haben können, solche Fehler sind sehr charakteristisch...

    ➡ Mehrere Stunden Fehlersuche umsonst investiert, weil du zu geizig mit Informationen warst.


Anmelden zum Antworten