2011-03-13 12 views
6

¡Parece que no puedo iniciar un miembro estático dentro de una plantilla de clase totalmente especializada!Inicializar un miembro estático en una plantilla de clase totalmente especializada

estoy tratando de hacer lo siguiente:

template<typename Type> 
class X 
{ 
}; 

template<> 
class X<int> 
{          
    public: 

    static int Value; 
} 

Pero me parece que no puede inicializar el miembro estático, he intentado todo, como:

template<> 
int X<int>::Value = 0; 

No compila, así que cualquier sugerencia sobre cómo hacer esto sería bueno;)

Editar: la respuesta debajo es correcta pero también debe colocar el init en el archivo .cpp y no en el encabezado f ile

Gracias por su tiempo, Richard.

Respuesta

6

No utilice template<> mientras se define Value porque template<> no está permitido en la definición explícita miembro de la clase especializada [X<int> en este caso]. Por otra parte se echa en falta un punto y coma después de }

Este works for me:

template<typename Type> 
class X 
{ 
}; 

template<> 
class X<int> 
{          
    public: 

    static int Value; 
}; 

int X<int>::Value = 0; 
+0

"plantilla <> no está permitido en la definición explícita miembro de la clase especializada" - Es bueno saber que, gracias! – Xeo

+0

Gracias, eliminando la plantilla <> y colocando el init en el archivo .cpp (que descubrí en su ejemplo). Ahora puedo compilarlo. ¡Gracias! – Richard

Cuestiones relacionadas