static variablen in template-klasse
-
hallo,
ich möchte eine static-variable für jede template klasse definieren, allerdings mag der compiler das nicht:
template <typename T> class Foo { Foo(); static int bar; }; template <typename T> int Foo<T>::bar = 0; template <typename T> Foo<T>::Foo(){}Compiler meint: Syntaxerror before '::' token.
Weiß jemand rat?
-
Hallo,
Templates darf man nicht in *.hpp und *.cpp Dateien aufsplitten, das können die (meisten) Compiler nicht. Du musst alles direkt in die *.hpp Datei schreiben, Deklarationen und Definitionen.
MfG
GPC
-
ja stimmt, ist in meinem programm auch nicht so. hab ich nur beim übertragen vergessen...
hab es mal aus dem beitrag rausgenommen.
-
Semikolon am Ende der Klassendefinition?
-
Auch daran leigt es nicht (hab auch das im Beispiel verbessert, das nächste mal sollt ich mal besser aufpassen beim code-abtippen)
MFK schrieb:
Semikolon am Ende der Klassendefinition?
Ich denke, es liegt daran, dass der Compiler einem nicht ausgeprägten Typ eines Templates keine static-Werte zuweisen kann.
-
Kompiliert bei mir einwandfrei (dein snippet von oben), musste nur den Standard-Ctor public machen damit ich Instanzen von Foo erstellen kann.
Der Fehler wird folglich von etwas anderem produziert.
-
Hallo miteinander,
Ich nehme alles zurück und entschuldige mich.
ich hatte im Code einen Tippfehler
-
Templates darf man nicht in *.hpp und *.cpp Dateien aufsplitten, das können die (meisten) Compiler nicht. Du musst alles direkt in die *.hpp Datei schreiben, Deklarationen und Definitionen.
Bist du sicher?
//interface.hpp: template<class T> void f(T t); //Deklaration //interface.cpp: export template<class T> void f(T t) //Definition { /*...*/ }
-
hehe, ja. Jedenfalls mit Einschränkung (
GPC schrieb:
das können die (meisten) Compiler nicht.
), die meisten Compiler, darunter die GCC, VC++, IBM, DigitalMars usw. können export (noch?) nicht (siehe auch den Template-Artikel dazu, Abschnitt 7).
Der Comeau kann export. Ich habe aber noch keinen gesehen, der den Comeau sein Eigen nennt und das wirklich mal ausführlich testen könnte.@mensch0815
Mir ist aufgefallen, dass wir dir mehrer mögliche Fehlerquellen genannt haben und du mehrmals mit den Worten "Nur n Übertragsungsfehler" geantwortet hast. Wenn du das nächste mal postest, bitte denke daran, den GLEICHEN Code wie bei dir zu posten.EDIT: RS-Fehler
MfG
GPC