Implemantionsfrage bei Element-Templates
-
Hallo!
Ich habe eine Frage zur Implementation von Element-Templates.
Die Klasse sieht wie folgt aus:namespace nsFoo { template<class classType> class Foo { private: public: Foo() {} ~Foo() {} // Element-Template template<class Element> classType * name(const Element &e); }; }
Wie implemetiere ich jetzt die Memberfunktion "name". Ich wollte Sie nich implizit inline implementieren aus Übersichtlichkeitsgründen, sondern die Implementation zu den übrigen Membern schreiben. Mein armer Kompiler versteht mich nicht (MS C++ Compiler und ich weiß nicht wie ich für ausdrücken soll.
Folgendes dachte ich mir:namespace nsFoo { // Implementationsdetails template<class classType, class Element> classType * Foo<classType>::name<Element>(const Element &e) { // Code... } }
Der Kompiler wirft folgende Fehler:
Fehler 1 error C2768: 'nsFoot::Foo<classType>::name': Unzulässige Verwendung von expliziten Vorlagenargumenten foo.h 88 Fehler 2 error C2768: 'nsFoot::Foo<classType>::name': Unzulässige Verwendung von expliziten Vorlagenargumenten foo.h 88 Fehler 3 error C2244: 'nsFoot::Foo<classType>::name': Keine Übereinstimmung für Funktionsdefinition mit vorhandener Deklaration gefunden foo.h 88
Hat hier vielleicht jemand eine Lösung?
-
namespace nsFoo { // Implementationsdetails template<class classType> template<class Element> classType * Foo<classType>::name<Element>(const Element &e) { // Code... } }
Sollte so gehen.
-
LordJaxom schrieb:
Sollte so gehen.
Danke Das habe ich auch schon probiert. Dann erhalte ich den Fehler
Fehler 1 error C2768: 'nsFoo::Foo<classType>::name': Unzulässige Verwendung von expliziten Vorlagenargumenten foo.h 89
Aus der Fehlerbeschreibung werde ich nicht schlau...
-
die fehlerbeschreibung sagt es eigentlich schon: der compiler schreibt eben
nsFoo::Foo<classType>::name
und nicht
nsFoo::Foo<classType>::name<Element>
bei normalen template funktionen wiederholst du die parameter ja auch nicht - was wozu gehört ergibt sich ja schon durch das doppelte template
folglichnamespace nsFoo { // Implementationsdetails template<class classType> template<class Element> classType * Foo<classType>::name(const Element &e) { // Code... } }
-
camper schrieb:
die fehlerbeschreibung sagt es eigentlich schon: der compiler schreibt eben
nsFoo::Foo<classType>::name
und nicht
nsFoo::Foo<classType>::name<Element>
bei normalen template funktionen wiederholst du die parameter ja auch nicht - was wozu gehört ergibt sich ja schon durch das doppelte templateJo, danke für das Entfernen des Bretts.
Da hätt' man ja auch selber drauf kommen können.