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? Zitieren
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. Zitieren
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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.