web-dev-qa-db-fra.com

Accéder aux variables de classe statiques en C ++?

Dupliquer:
C++: référence non définie au membre de classe statique

Si j'ai une classe/structure comme celle-ci

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

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

Ça ne marche pas. J'obtiens une erreur "référence non définie à` Foo :: bar '". Comment accéder aux variables de classe statiques en C++?

27
Paul Wicks

Vous devez ajouter la ligne suivante dans le fichier implementation:

int Foo::bar = you_initial_value_here;

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

59
Drakosha

C'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 .cpp fichiers, dites ceci:

int Foo::bar = 0;  // or whatever value you want
16
Chris Jester-Young

Vous devez ajouter une ligne:

int Foo::bar;

Cela vous définirait un stockage. La définition de statique en classe est similaire à "extern" - elle fournit un symbole mais ne le crée pas. c'est à dire

foo.h

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

foo.cpp

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

pour utiliser une variable statique en classe, vous devez d'abord donner une valeur générale (pas localement) à votre variable statique (initialiser) puis 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;
}
1
BattleTested