Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens des erreurs « Référence non définie à une variable statique » lors de l'accès à des variables statiques en C ?

Pourquoi est-ce que j'obtiens des erreurs « Référence non définie à une variable statique » lors de l'accès à des variables statiques en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-30 01:12:16421parcourir

Why Do I Get

Problème de référencement de variables statiques en C

En C, l'accès aux variables statiques dans les méthodes de classe non statiques peut entraîner des erreurs de compilation si la variable statique la variable n’est pas correctement définie. Une erreur courante rencontrée est "référence non définie à une variable statique".

Le problème

Considérez l'extrait de code suivant :

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

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

Ce code vise à accéder à la variable statique x à partir de la méthode non statique foo(). Cependant, la compilation de ce code peut entraîner l'erreur « référence non définie à une variable statique » car la variable statique x n'a pas de définition.

La solution

La solution est de fournir une définition de la variable statique x en dehors de la définition de classe. La définition peut être ajoutée après la définition de la classe, comme indiqué ci-dessous :

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

// Definition of static variable x
int Helloworld::x = 0; // Initialize x to 0 (or any appropriate value)

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

En définissant la variable statique x en dehors de la définition de la classe, le compilateur peut localiser et allouer de la mémoire pour x. De plus, il est important d'initialiser la variable statique à une valeur spécifique ou de lui permettre d'être initialisée à zéro en l'absence d'initialiseur.

Avec ces modifications, le code sera compilé et exécuté avec succès, vous permettant de accéder à la variable statique x à partir des fonctions membres non statiques de la classe Helloworld.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn