2011-12-20 8 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’¿Qué hay de malo en esta definición de plantilla?

+2

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

+0

Ahora, para una estúpida pregunta de seguimiento: ¿por qué no acaba de eliminar la última línea? ¿No es solo una segunda declaración redundante? –

+2

Doh! Ya lo veo. Referencias no definidas Es la * definición * requerida, mientras que la línea anterior es solo la * declaración *. –

Respuesta

9

Usted necesita typename antes myarray<N>::Bitmap porque es un tipo dependiente:

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

    template <int N> 
    typename myarray<N>::Bitmap myarray<N>::data[N]; 
// ^^^^^^^^ 
Cuestiones relacionadas