web-dev-qa-db-fra.com

Référence non définie à la variable statique c ++

Bonjour, je reçois une erreur de référence non définie dans le code suivant:

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

Je ne veux pas d'une fonction staticfoo(). Comment accéder à la variable static d'une classe dans la méthode non -static d'une classe?

56
Aqeel Raza

Je ne veux pas de fonction staticfoo()

Eh bien, foo() est pas statique dans votre classe, et vous faites pas vous devez le rendre static pour pouvoir accéder à static variables de votre classe.

Ce que vous devez faire est simplement de fournir une définition pour votre variable membre statique:

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

Le code est correct mais incomplet. La classe Helloworld a un déclaration de son membre de données statique x, mais il n'y a pas de définition de ce membre de données. Vous avez besoin de quelque chose dans votre code source

int Helloworld::x;

ou, si 0 n'est pas une valeur initiale appropriée, ajoutez un initialiseur.

48
Pete Becker