2012-08-10 14 views
5

Duplicar posibles:
Defining static members in C++¿Por qué no puedo inicializar el campo estático en C++

estoy trabajando poco en C++, y no entiendo cómo utilizar los campos estáticos en C++ , parecen inútiles. Por favor corrigeme.

no puedo hacer eso:

class AClass{ 
    public: 
     static int static_field = 0; 
}; 

Y eso no funciona bien

class AClass{ 
    public: 
     static int static_field; 
}; 

int main(){ 
    int AClass::static_field = 0; 
    return 0; 
} 
+0

'@ w00te' y otros ya han respondido a la pregunta. Creo que su confusión surge del hecho de que en C++ * declaración * y * definición * son dos cosas diferentes. Uno hace que el símbolo sea visible, el otro asigna almacenamiento. Realice una búsqueda en "declaración C++ vs definición" o similar. – David

+0

Hrm? Mi respuesta tiene el temporizador más largo y no recuerdo usar la definición de palabra en ningún lado. De MSFT: "Declaración: es una declaración de nombre de clase sin definición siguiente, como clase T ;." y eso es lo que tiene en su segunda muestra de código. –

Respuesta

9

Debe inicializar static_field fuera del alcance de la función principal.

int AClass::static_field = 0; 
int main(){ 
} 
14

En realidad, estaban cerca.

debe mover: int AClass::static_field = 0; fuera del main() por lo que es global en un archivo CPP, preferentemente AClass.cpp.

De esta manera, se declara que en su encabezamiento y lo inicializa en el archivo de origen. Puede usarlo en main() o en cualquier otro lugar simplemente haciendo AClass::static_field después de que haya configurado esta declaración/inicialización.

PD: Definitivamente no son inútiles.

He aquí un buen caso de uso ... Supongamos que tiene pérdidas de memoria y necesita rastrearlas. Pones un contador estático en tu clase, por lo que todas las instancias de esa clase lo comparten. A continuación, crea incrementos de constructores/destructores y disminuye ese contador. Entonces, puede imprimir el contador para mostrar cuántas instancias de una clase existen para ayudarlo a encontrar sus filtraciones.

4

Prueba esto:

class AClass{ 
    public: 
     static int static_field; 
}; 

int AClass::static_field = 0; 

int main(){ 
    return 0; 
} 
4

Cuando está declarando una variable estática aquí se está indicando que no va a haber una instancia de esta variable compartida entre todas las instancias de la clase.

Mover la declaración fuera de la función principal como algunas de las otras respuestas proporcionadas es la solución correcta.

Aquí es parte de la documentación de MSDN en la palabra clave estática:

http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx

esperanza esto ayuda

Cuestiones relacionadas