Template Spezialisierung - Was bedeutet dieser Fehler?
-
Folgende Situation:
template<ubyte_t Size = sizeof(unsigned)> class uint { public: // typedef unsigned _t; }; template<4> // Spezialisiert für 1, 2, 4 und 8 class uint { public: // typedef uint32_t _t; }; template<ubyte_t Bpp> uint<Bpp>::_t Bgrx(uint<Bpp>::_t A, uint<Bpp>::_t B) { // Diese Funktion lässt sich nicht kompilieren... }Nun bekomme ich aber, obwohl ich die Funktion noch nicht einmal verwende viele Fehler: "uint<Size>::_t: dependent name is not a type", "syntax error: missing ';' before identifier Bgrx" und "missing type specifier - int assumed. Note: C++ doesn't support default-int"
Ich verwende Visual C++ 8 und will via Template Spezialisierung den passenden Integertypen für die entsprechende Byteanzahl erhalten. uint<8>::_t soll also einem unsigned __int64 bzw. einem unsigned long long entsprechen. Das ist unbedingt nötig, da ich sonst eine ganze Reihe von Funktionen mehrmals schreiben müsste. Warum geht das nicht?!
-
typename bei typedef im Template vergessen.
-
Mathias schrieb:
typename bei typedef im Template vergessen.
Was soll das jetzt wieder heissen? Der Compiler sagt: "prefix with 'typename' to indicate a type"
Aber wo kommt das typename denn hin?
-
template<ubyte_t Bpp> typename uint<Bpp>::_t Bgrx(typename uint<Bpp>::_t A, typename uint<Bpp>::_t B)
-
miller_m schrieb:
template<ubyte_t Bpp> typename uint<Bpp>::_t Bgrx(typename uint<Bpp>::_t A, typename uint<Bpp>::_t B)Danke Junge
