2011-12-20 15 views
6
template <int N> 
class myarray { 
    typedef int Bitmap; 
public: 
    static Bitmap data[N]; 
}; 

template <int N> myarray<N>::Bitmap myarray<N>::data[N]; 

error: expected constructor, destructor, or type conversion before ‘myarray’Cosa c'è di sbagliato in questa definizione del modello?

+2

Rilevante: http://stackoverflow.com/questions/610245/where-and-why-do-i- parole chiave-have-to-put-the-template-and-typename –

+0

Ora per una stupida domanda di follow-up: perché non eliminare l'ultima riga? Non è solo una seconda dichiarazione ridondante? –

+2

Doh! Ora vedo. Riferimenti non definiti. È la * definizione * richiesta, mentre la riga precedente è solo la * dichiarazione *. –

risposta

9

È necessario typename prima myarray<N>::Bitmap perché è un tipo di dipendente:

template <int N> 
class myarray { 
    typedef int Bitmap; 
public: 
    static Bitmap data[N]; 
}; 

    template <int N> 
    typename myarray<N>::Bitmap myarray<N>::data[N]; 
// ^^^^^^^^ 
Problemi correlati