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++?
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.
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
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() { ... }
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;
}