Accesso a variabili di class statiche in C ++?

Duplicare:
C ++: riferimento non definito al membro della class statico

Se ho una class / struct come questa

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

Questo non funziona. Ricevo un “riferimento non definito a errore” Foo :: bar “”. Come posso accedere a variabili di class statiche in C ++?

È necessario aggiungere la seguente riga nel file di implementazione :

 int Foo::bar = you_initial_value_here; 

Questo è richiesto in modo che il compilatore abbia un posto per la variabile statica.

È la syntax corretta, tuttavia, Foo::bar deve essere definito separatamente, al di fuori dell’intestazione. In uno dei tuoi file .cpp , dì questo:

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

È necessario aggiungere una riga:

 int Foo::bar; 

Questo ti definirebbe un deposito. La definizione di static in class è simile a “extern” – fornisce il simbolo ma non lo crea. vale a dire

foo.h

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

foo.cpp

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

per l’uso della variabile statica in class, in primo luogo è necessario fornire un valore generico (non locale) alla variabile statica (initialize), quindi è ansible accedere a un membro statico in class:

 class Foo { public: static int bar; int baz; int adder(); }; int Foo::bar = 0; // implementation int Foo::adder() { return baz + bar; }