Maison > développement back-end > C++ > Quelles sont les causes des erreurs « Référence non définie à un membre statique » en C et comment sont-elles résolues ?

Quelles sont les causes des erreurs « Référence non définie à un membre statique » en C et comment sont-elles résolues ?

Linda Hamilton
Libérer: 2024-12-09 00:39:13
original
659 Les gens l'ont consulté

What Causes

Que signifie avoir une référence non définie à un membre statique ?

En C , une variable membre statique est une variable de classe qui existe indépendamment de toute instance d'objet . Il est généralement initialisé au moment de la compilation et peut être partagé par toutes les instances de la classe.

Cependant, si vous déclarez une variable membre statique sans fournir de définition, le compilateur générera un message d'erreur concernant une "référence non définie ". En effet, le compilateur doit connaître l'emplacement mémoire de la variable statique afin de générer le code qui y accède.

Pour résoudre cette erreur, vous devez fournir une définition de la variable membre statique dans un fichier source ( .cpp). La définition doit avoir le même nom que la déclaration dans le fichier d'en-tête (fichier .h), mais doit être précédée de l'opérateur de portée (::). Par exemple :

// header file
class Example {
public: 
    static int x;
};

// source file
int Example::x;
Copier après la connexion

Cela définira l'emplacement mémoire de la variable statique x et permettra au compilateur de générer du code qui y accède.

Cas particuliers

  • Types const intégral ou énumération : Pour les variables membres statiques qui sont de type const intégral ou types d'énumération, vous pouvez fournir un initialiseur dans la déclaration de classe dans le fichier d'en-tête. La définition dans le fichier source ne doit pas avoir d'initialiseur.
  • Modèles : Pour les variables membres statiques des modèles de classe, la définition doit être fournie dans le fichier d'en-tête avec la définition de la classe.

Autres utilisations de static

Le mot-clé static a des significations différentes lorsqu'il est appliqué à des objets ou des fonctions qui ne sont pas dans une portée de classe :

  • Objets dans la portée de la fonction : Déclare un objet qui est initialisé lors de la première exécution de la fonction et conserve sa valeur entre les appels de fonction .
  • Objets ou fonctions dans la portée de l'espace de noms : Déclare des objets ou des fonctions avec un lien interne, ce qui est obsolète pour objets.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal