undefined reference to



  • Hallo,

    ich habe ein paar Programmdateien zusammengeschreiben:

    linkedListElement.h
    linkedListElement.cpp -> includet linkedList.h

    linkedList.h -> includet linkedListElement.h
    linkedList.cpp -> includet linkedList.h

    split.h -> inlcudet linkedList.h
    split.cpp -> includet split.h

    main.h -> includet split.h und linkedList.h
    main.cpp -> includet main.h

    Im Groben: linkedList stellt eine verkettete Liste bereit, linkedListElement die Elemente der Liste.
    Mit split kann ich einen string an bestimmen Stellen trennen, die vielen strings werden in einer linkedList zurückgegeben.
    In der main versuche ich einen string zu splitten und in eine linkedList zu schreiben und dann auszugeben.

    Die CPP-Dateien kann ich alle problemlos compilen, aber beim linken bekomme ich Schwierigkeiten: alle Funktionen von Klassen, die ich in der main.cpp benutzt habe werden mit "undefined reference to" (z.B. `linkedList<.....>::linkedList() )

    linkedList und linkedListElement benutzen Templates, ich hatte mal gelesen, das man dann die definition in die .h mit reinschreiben soll, aber das würde dann ja wieder "redefinition of ..." hervorrufen.

    ich schreibe per Texteditor compile und linke auf der Konsole und hab es schon mit nur dem main linken versucht und mit allen compilaten:

    $ g++ -o main main.o
    g++ -o main main.o split.o ../linkedList/linkedList.o ../linkedList/linkedListElement.o
    

    hat jemend eine Idee, was ich falsch mache oder besser machen könnte?

    Schönen Abend

    Marc



  • Th3Link schrieb:

    linkedList und linkedListElement benutzen Templates, ich hatte mal gelesen, das man dann die definition in die .h mit reinschreiben soll, aber das würde dann ja wieder "redefinition of ..." hervorrufen.

    Du musst die Templates selber mit Implementierung im Header definieren. Bei templates führt das auch nicht zu "redefinition of...". Wenn du dagegen "normale" Funktionen/Klassen hast, die die Templates nur verwenden, solltest du die in einer cpp-Datei definieren.

    Felix



  • ahh, ok, danke schön, das klappt. Ich hatte das #endif bei meinem ersten Versuch ganz oben plaziert, also da, wo es bei der normalen Headerdatei auch ist.

    MfG Marc


Anmelden zum Antworten