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 🙂 👍


Anmelden zum Antworten