2009-04-13 9 views
22

double:
C++: undefined reference to static class memberAccéder aux variables de classes statiques en C++?

Si j'ai une classe/struct comme celui-ci

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

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

Cela ne fonctionne pas. Je reçois une erreur "référence non définie à` Foo :: bar '". Comment accéder aux variables de classes statiques en C++?

+1

Notez qu'il vous manque un ';' après la définition de la classe. – dirkgently

Répondre

53

Vous devez ajouter la ligne suivante dans le fichier de mise en œuvre:

int Foo::bar = you_initial_value_here; 

Ceci est nécessaire afin que le compilateur a une place pour la variable statique.

16

Il est la syntaxe correcte, cependant, Foo::bar doit être défini séparément, en dehors de l'en-tête. Dans l'un de vos fichiers .cpp, dire ceci:

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

Bonjour Chris, Y a-t-il quelque chose qui ne va pas si nous avons autant de variables membres de classes statiques publiques dans C++ (code source non multi-thread). J'ai déplacé certaines de mes variables globales vers une classe en tant que static public. – sree

15

Vous devez ajouter une ligne:

int Foo::bar; 

qui vous définir un stockage. Définition de statique dans la classe est similaire à "extern" - il fournit un symbole, mais ne le crée pas. à savoir

foo.h

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

foo.cpp

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

pour une utilisation de la variable statique dans la classe, dans le premier, vous devez donner une valeur generaly (pas localy) à votre variable statique (initialize) alors vous pouvez accéder à un membre statique en classe:

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

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