?
egger schrieb:
ich dachte, dass waere gerade der vorteil von templates, dass der datentyp vorher nicht bekannt sein muss.
Wenn du die Template-Klasse entwickelst, ist der verwendete Datentyp egal (du gehst einfach davon aus, daß er alle benötigten Operationen anbietet). Wenn du die Template-Klasse anwendest, brauchst du einen bestimmten Datentyp.
ausserdem habe ich den konstruktor der klasse2 doch als template methode definiert, also sollte es doch klappen !?!
Ja, hast du - und genau das ist dein Problem
Wenn der Compiler deinen Anwendungscode anfässt, sieht er nur die Deklarationen und notiert dem Linker, daß er z.B. einen Konstruktor "Klasse2::Klasse2(Klasse1<int>)" benötigt.
Wenn der Compiler die "klasse2.cpp" bearbeitet, hat er keine Ahnung, ob er später den Konstruktor "Klasse2::Klasse2(Klasse1<int>)", "Klasse2::Klasse2(Klasse1std::string*)" oder irgendwas anderes benötigen wird - also kann er keinen brauchbaren Code zusammensetzen (eine Anweisung wie "T tmp =arg->data();" sieht zwar für jeden Typ gleich aus, resultiert aber in völlig anderen Maschinencodes.
Als Lösung deines Problems bleibt dir nur eine Möglichkeit: Schieb die Definition des Konstruktors aus der CPP-Datei in den Header.