Kadaj Geschrieben 21. Oktober 2012 Geschrieben 21. Oktober 2012 Abend, ich arbeite an einem Programm um Literatur zu verwalten. In einer Klasse "Verwaltung" möchte ich die Listen verwalten. Es geht dabei im die Code-Schnipsel: Verwaltung.hpp: #ifndef __VERWALTUNG_H_ #define __VERWALTUNG_H_ #include "List.hpp" #include "Person.hpp" #include "Date.hpp" #include "Book.hpp" #include "Journal.hpp" #include "Lend.hpp" class Verwaltung{ private: List<Person> Liste_Person; List<Book> Liste_Book; List<Journal> Liste_Journal; List<Lend> Liste_Lend; public: Verwaltung(); // zunächst eine leere Liste erstellen ... ... ... [/PHP] [PHP] #include "Verwaltung.hpp" Verwaltung::Verwaltung(){} ... ... ... Beim Kompilieren bekomme ich die Fehler: /tmp/ccO3rDL8.o: In function `Verwaltung::Verwaltung()': Verwaltung.cpp:(.text+0x15): undefined reference to `List<Person>::List()' Verwaltung.cpp:(.text+0x25): undefined reference to `List<Book>::List()' Verwaltung.cpp:(.text+0x35): undefined reference to `List<Journal>::List()' Verwaltung.cpp:(.text+0x45): undefined reference to `List<Lend>::List()' Verwaltung.cpp:(.text+0x5a): undefined reference to `List<Journal>::~List()' Verwaltung.cpp:(.text+0x6f): undefined reference to `List<Book>::~List()' Verwaltung.cpp:(.text+0x80): undefined reference to `List<Person>::~List()' collect2: Fehler: ld gab 1 als Ende-Status zurück Wenn ich beim Kompilieren die Verwaltung.cpp rausnehme und den Teil in die hpp einfüge: Verwaltung(){} [/PHP] Dann lässt es sich problemlos übersetzen. Ich muss beim Auslagern irgendwas falsch machen. Ich hab jetzt keinen anderen Quellcode gepostet, weil ich nicht sicher bin wo der Fehler liegt. Ich vermute aber, dass er an einer der obrigen Stellen ist. Kann mir jemand die Fehlermeldung etwas näher bringen?
Kadaj Geschrieben 21. Oktober 2012 Autor Geschrieben 21. Oktober 2012 Ich sollte vielleicht noch erwähnen, dass ich die List.hpp udn die List.cpp getrennt habe. Ich hab die List.cpp erstmal beim kompilieren ausgeschlossen und die Funktionen in die List.hpp gepackt. So würde es funktionieren. Aber mich würde trotzdem interessieren wie ich den Fehler ohne diesen Schritt wegbekomme.
Klotzkopp Geschrieben 21. Oktober 2012 Geschrieben 21. Oktober 2012 Aber mich würde trotzdem interessieren wie ich den Fehler ohne diesen Schritt wegbekomme.Gar nicht. Dort, wo die Templates instanziiert werden (in deinem Fall Verwaltung.hpp), muss die vollständige Definition sichtbar sein. Das ist der Grund dafür, dass man Klassentemplates normalerweise nicht in Header- und Implementierungsdatei aufteilt. Die einzige andere Möglichkeit ist, die konkreten Klassen List<Person> usw. in List.cpp explizit zu instanziieren: template class List<Person>; Das erfordert natürlich, dass die Template-Parameter in List.cpp sichtbar sind, was man normalerweise nicht möchte.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden