119 votes

Référence indéfinie à une variable statique c++

Bonjour, j'obtiens une erreur de référence indéfinie dans le code suivant :

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

Je ne veux pas static foo() fonction. Comment puis-je accéder à static variable d'une classe en non static d'une classe ?

150voto

Andy Prowl Points 62121

Je ne veux pas static foo() fonction

Bien, foo() est no statique dans votre classe, et vous faites no doivent le faire static afin d'accéder à static des variables de votre classe.

Ce que vous devez faire est simplement de fournir un 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;
};

77voto

Pete Becker Points 27371

Le code est correct, mais incomplet. La classe Helloworld a un déclaration de son membre statique x mais il n'y a pas de définition de cet élément de données. Quelque part dans votre code source, vous avez besoin de

int Helloworld::x;

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

51voto

pvc Points 700

Vieille question, mais ;

Depuis c++17 vous pouvez déclarer static membres inline et les instancier à l'intérieur du corps de class sans avoir besoin d'un out-of-class définition :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X