2009-04-13 13 views
22

duplicado:
C++: undefined reference to static class member¿Accediendo a variables de clase estáticas en C++?

Si tengo una clase/estructura como esta

// header file 
class Foo 
{ 
    public: 
    static int bar; 
    int baz; 
    int adder(); 
}; 

// implementation 
int Foo::adder() 
{ 
    return baz + bar; 
} 

esto no funciona. Aparece un error de "referencia indefinida al error` Foo :: bar '". ¿Cómo accedo a las variables de clase estáticas en C++?

+1

Tenga en cuenta que falta un ';' después de la definición de la clase. – dirkgently

Respuesta

53

debe agregar la siguiente línea en el archivo de aplicación :

int Foo::bar = you_initial_value_here; 

Esto es necesario para que el compilador tiene un lugar para la variable estática.

16

Es la sintaxis correcta, sin embargo, Foo::bar debe definirse por separado, fuera del encabezado. En uno de sus .cpp archivos, decir esto:

int Foo::bar = 0; // or whatever value you want 
+0

Hola, Chris, ¿hay algo mal si tenemos tantas variables de miembro de clase estáticas públicas en C++ (código fuente no multihebra). He movido algunas de mis variables globales a una clase como pública estática. – sree

15

Usted necesita añadir una línea:

int Foo::bar; 

Que definiría un almacenamiento. La definición de estática en clase es similar a "extern": proporciona un símbolo pero no lo crea. es decir

foo.h

class Foo { 
    static int bar; 
    int adder(); 
}; 

foo.cpp

int Foo::bar=0; 
int Foo::adder() { ... } 
1

para el uso de la variable estática en la clase, en primer lugar se debe dar un valor generaly (sin localy) a la variable estática (inicializar) luego puede acceder a un miembro estático en la clase:

class Foo 
{ 
    public: 
    static int bar; 
    int baz; 
    int adder(); 
}; 

int Foo::bar = 0; 
// implementation 
int Foo::adder() 
{ 
    return baz + bar; 
} 
Cuestiones relacionadas