it-swarm.com.de

Undefinierter Verweis auf statische Variable c ++

Hallo, ich erhalte einen undefinierten Referenzfehler im folgenden Code:

class Helloworld{
  public:
     static int x;
     void foo();
};
void Helloworld::foo(){
     Helloworld::x = 10;
};

Ich möchte keine staticfoo() -Funktion. Wie kann ich auf die static -Variable einer Klasse in der Nicht-static -Methode einer Klasse zugreifen?

56
Aqeel Raza

Ich möchte keine staticfoo() -Funktion

Nun, foo() ist nicht statisch in Ihrer Klasse, und Sie müssen nicht es zu static machen, um auf static Variablen Ihrer Klasse zuzugreifen.

Sie müssen lediglich eine Definition für Ihre statische Mitgliedsvariable bereitstellen:

class Helloworld {
  public:
     static int x;
     void foo();
};

int Helloworld::x = 0; // Or whatever is the most appropriate value
                       // for initializing x. Notice, that the
                       // initializer is not required: if absent,
                       // x will be zero-initialized.

void Helloworld::foo() {
     Helloworld::x = 10;
};
85
Andy Prowl

Der Code ist korrekt, aber unvollständig. Die Klasse Helloworld hat eine Deklaration ihres statischen Datenelements x, aber es gibt keine Definition dieses Datenelements. Irgendwo in deinem Quellcode brauchst du

int Helloworld::x;

wenn 0 kein geeigneter Anfangswert ist, fügen Sie einen Initialisierer hinzu.

48
Pete Becker