Template nutzen für Klassen
-
Hallo,
ich möchte gerne den Template-Mechanismus nutzen, um eine Klasse aus mehreren alternativen Klassen zu bauen. Eigentlich sollte die das wie folgt funktionieren. Wenn die ich die Memberfunktion member_function weglasse, dann geht das bei VC++ 6.0 auch gut. Wenn ich die Funktion hinzunehme, sagt mir der Compiler: Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentenliste erforderlich. Frage: Ist es überhaupt möglich den Template-Mechanismus hierfür zu verwenden und wenn ja, was mache ich falsch ?
Vielen Dank
template <class T>
class upper_class : public T {
public:
const char *member_function();
};template <class T>
const char *upper_class::member_function() {
return ("info");
}
-
Du hast etwas bei der Definition der Methode vergessen - richtig heißt das:
template <class T> const char *upper_class<T>::member_function() { return ("info"); }
(schließlich will der Compiler gerne wissen, was er mit dem "T" in diesem Template anfangen soll)
-
template <class T> const char* upper_class<T>::member_function() { return ("info"); }
wenn ich mich nicht irre.
PS: C++-Highlighter verwenden
*edit* Zu spät
-
[edit] ich nehm (fast) alles zurück! [/edit]
Greetz, Swordfish
-
Vielen Dank für die schnelle Antwort, doch nun habe ich das Problem, dass der Linker nicht will. Ich habe folgenden Code:
template <class T> class StepAxis2Placement : public T { public: const char *member_function(); }; template <class T> const char *StepAxis2Placement<T>::member_function(){ return ("Test"); }
und versuche das ganze wie folgt aufzurufen:
StepAxis2Placement<StepAxis2Placement3D> test; const char *ausgabe = test.member_function();
Beim Linken sagt Visual C mit: Nichtaufgeloestes externes Symbol "public: char const * __thiscall StepAxis2Placement<class StepAxis2Placement3D>::member_function(void)" (?member_function@?$StepAxis2Placement@VStepAxis2Placement3D@@@@QAEPBDXZ)
-
Template-Klassen und -Methoden sollten komplett in der Header-Datei stehen (oder in der Quellcode-Datei, in der sie verwendet werden).
-
[quote="Neku"]Template-Klassen und -Methoden sollten komplett in der Header-Datei stehen (oder in der Quellcode-Datei, in der sie verwendet werden).[/quote]
Vielen Dank für Eure Hilfe, jetzt funktioniert alles !!
Carsten