Problem mit Template Funktion
-
Hi!
Ich habe ein Problem mit Template Funktionen in einer Klasse ... Habe noch kaum mit templates gearbeitet und versteh den Fehler nicht. Wenn ich die Funktionen nicht in der Klasse definiere dann funktioniert der Code. Schon mal vielen Dank,Max
template<typename Type, unsigned int Cellsize> class Data { ... }; class Writer { ... template< typename T > std::string TypeDescription() { ... }; template<> std::string TypeDescription<double>() { return std::string("double"); }; template< typename Type, unsigned int Cellsize > inline void WriteField( const Data<Type,Cellsize> &d) { cout<<TypeDescription<Type>(); }; }; int main() { Data<double,1> test; Writer write; write.WriteField(test); return 0; }
-
max1234 schrieb:
versteh den Fehler nicht.
Welchen?
-
error C2275: "Type" : Ungültige Verwendung dieses Typs als Ausdruck Siehe Deklaration von 'Type' Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __thiscall Writer::WriteField(const class Data &)' error C2059: Syntaxfehler : ')' Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __thiscall Writer::WriteField(const class Data &)' Fehler beim Ausführen von cl.exe.
-
Explizite Spezialisierungen von Membertemplates müssen im Namensraum, der die jeweilige Klasse umgibt deklariert werden, nicht in der Klasse selbst.
-
Danke. Aber ich mach immer noch irgendwas falsch. Jetzt bekomme ich den Fehler
fatal error C1001: INTERNER COMPILER- FEHLER
namespace temp { template<typename Type, unsigned int Cellsize> class Data { ... }; class Writer { ... template< typename T > std::string TypeDescription() { ... }; template< typename Type, unsigned int Cellsize > inline void WriteField( const Data<Type,Cellsize> &d) { cout<<TypeDescription<Type>(); }; }; template<> std::string Writer::TypeDescription<double>() { return std::string("double"); }; } //namespace temp int main() { temp::Data<double,1> test; temp::Writer write; write.WriteField(test); return 0; }
-
Zeig den Code mal exakt so wie du den Compiler fütterst. Welcher Compiler wird eingesetzt?
Hinter geschweifte Klammern, die Funktionsdefinitionen abschließen, gehört kein Komma.
-
Ich benutze VC++6.0
Das war schon fast der ganze code...
typedef double Real; using namespace std; namespace test{ template<typename Type, unsigned int Cellsize> class Data { }; class Writer { public: Writer(); ~Writer(); template< typename Type > std::string TypeDescription() { cout<<("Error in Writer::TypeDescription(): Unknown Datatype "); return (" "); } template< typename Type, unsigned int Cellsize > inline void WriteField( const Data<Type,Cellsize> &d) { cout<<TypeDescription<Type>(); } private: }; template<> std::string Writer::TypeDescription<Real>() { return std::string("double"); } } int main() { test::Data<Real,1> hallo; test::Writer write; write.WriteField(hallo); return 0; }
-
Max1234 schrieb:
Ich benutze VC++6.0
Das wird der Grund sein. Ich empfehle ein Update auf die neueste Version, VC6 ist einfach zu fehlerhaft.
-
Konrad Rudolph schrieb:
Max1234 schrieb:
Ich benutze VC++6.0
Das wird der Grund sein. Ich empfehle ein Update auf die neueste Version, VC6 ist einfach zu fehlerhaft.
Genau, würde ich auch empfehlen. VC++08 funktioniert es. Afaik haben älteren Compiler ja noch Probleme mit Templates/ Spezialisierung.
-
.. da hätt ich lange suchen können
Jetz gehts...Danke nochmal!!