Template Problem - ... is not a template type
-
Hi,
Ich probier gerade eine Klasse mit einem Template zu erweitern, doch ich komme einfach nicht an diesem Fehler vorbei..h
template <class Typ> class GUISlider : public GUIBase { private: Typ* var; double length; bool vertical; public: GUISlider (GUIForm* FORM); ~GUISlider (); void setVar (Typ* VAR); void draw (void); };.cpp
template <class Typ> ge::GUISlider<Typ>::GUISlider (GUIForm* FORM) { parentForm = FORM; var = 0; length = 0; vertical = true; } template <class Typ> ge::GUISlider<Typ>::~GUISlider () { } template <class Typ> void ge::GUISlider<Typ>::setVar (Typ* VAR) { var = VAR; } template <class Typ> void ge::GUISlider<Typ>::draw (void) { }Der einzige Fehler den ich bekomme lautet:
[Error] 'ge::GUISlider' is not a template type
Im Header, Zeile 2 (class GUISlider : public GUIBase)Aber wo liegt das Problem?
-
Schau mal in die FAQ-Liste
-
Unter Punkt 5.
Siehe auch hier den Beitrag von wxSkip ab Punkt 4.
-
Du musst die Definitionen in den Header machen.
MfG
Edit: Zu langsam, sorry.
-
DrFail schrieb:
Aber wo liegt das Problem?
Hast du eine Include-Direktive für den Header?
-
Also wenn ich jetzt alle Funktionen in die Klassen-Deklaration packe, muss ich dann für jeden Datentyp eine spezielle Definition in die .cpp Datei schreiben?
@MFK: Ja, die ist drin, daran liegts leider nicht.
-
Ich kann den Fehler nicht reproduzieren:
http://ideone.com/WiKgD
-
DrFail schrieb:
Also wenn ich jetzt alle Funktionen in die Klassen-Deklaration packe
Wenn das das einzige Problem wäre, würdest du Linkerfehler sehen. Die Compilerfehlermeldung hat eine andere Ursache.
Hast du vielleicht irgendwo eine Forward Declaration von GUISlider, ohne template?
Zeig doch mal ein kompilierbares Minimalbeispiel, das den Fehler reproduziert.
-
DrFail schrieb:
Also wenn ich jetzt alle Funktionen in die Klassen-Deklaration packe,
Du meinst eine Klassendefinition.
DrFail schrieb:
muss ich dann für jeden Datentyp eine spezielle Definition in die .cpp Datei schreiben?
Schau in deinem C++-Buch nach der "one definition rule"
-
Ohne Glaskugel rate ich mal, dass es eine vorherige Deklaration von GUISlider gibt, die kein Template deklariert (sondern vermutlich eine normale Klasse).
Ohne den gesamten Code zu kennen, kann es jedenfalls keine definitive Antwort geben.
http://www.c-plusplus.net/forum/304133
-
Alles klar, hab den Fehler gefunden. Ich einer anderen Klasse stand noch "friend class GUISlider".
Das braucht es aber gar nicht mehr, habs wohl vergessen rauszunehmen.
Sorry für die unnötige Störung und trotzdem danke, dass ihr mich auf die richtige Spur gebracht habt.