2009-04-13 24 views
22

Duplizieren:
C++: undefined reference to static class memberZugreifen auf statische Klassenvariablen in C++?

Wenn ich eine Klasse/Struktur wie diese nicht funktionieren Dies gilt

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

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

haben. Ich bekomme einen "undefinierten Verweis auf` Foo :: bar '"Fehler. Wie greife ich auf statische Klassenvariablen in C++ zu?

+1

Beachten Sie, dass Sie ein ';' nach der Klassendefinition. – dirkgently

Antwort

53

Sie müssen die folgende Zeile in der Implementierung Datei hinzufügen:

int Foo::bar = you_initial_value_here; 

Dies ist erforderlich, damit der Compiler einen Platz für die statische Variable hat.

16

Es ist die korrekte Syntax, jedoch muss Foo::bar außerhalb des Headers separat definiert werden. In einem Ihre .cpp Dateien, sagt diese:

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

Hallo Chris, ist etwas falsch, wenn wir so viele öffentliche statische Klassenmitglieder Variablen in C++ (nicht Multi-Thread-Quellcode) haben. Ich habe einige meiner globalen Variablen in eine Klasse als öffentliche statische Variable verschoben. – sree

15

Sie brauchen eine Zeile hinzu:

int Foo::bar; 

, dass Sie einen Speicher definieren würde. Die Definition von static in class ist ähnlich wie "extern" - es stellt ein Symbol zur Verfügung, erstellt es aber nicht. dh

foo.h

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

foo.cpp

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

zur Verwendung von statischen Variablen in der Klasse, in erster Sie einen Wert generaly (kein localy), um Ihre statischen Variablen geben muss (initialisieren) dann können Sie auf ein statisches Mitglied in der Klasse zugreifen:

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

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