Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens des erreurs « Référence non définie » avec des membres statiques en C ?

Pourquoi est-ce que j'obtiens des erreurs « Référence non définie » avec des membres statiques en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-07 22:27:13441parcourir

Why Am I Getting

Références non définies aux membres statiques : guide du débutant

Les membres de données statiques sont souvent employés pour partager des informations entre les instances d'une classe. Cependant, les développeurs rencontrent parfois des erreurs de « référence non définie » lors de l’utilisation de données membres statiques. Ce problème se pose en raison de la distinction entre les déclarations et les définitions.

Comprendre les déclarations et les définitions

Une déclaration introduit l'existence d'une variable au compilateur sans spécifier son emplacement mémoire. Une définition, en revanche, alloue de la mémoire à la variable et fournit son adresse.

Dans le cas de données membres statiques, leur déclaration a lieu dans la définition de classe mais ne leur attribue pas d'adresse. La définition réelle doit être fournie séparément.

Définition de membres de données statiques

Pour résoudre les erreurs de « référence non définie », définissez explicitement les membres de données statiques en dehors de la définition de classe, généralement dans le fichier d'implémentation (.cpp). Par exemple, considérons le code suivant :

// Header file (.h)
class Example {
    static bool exampleStaticMember;
};

// Implementation file (.cpp)
bool Example::exampleStaticMember;

Exception pour les types intégraux et énumérations

Les données statiques membres des types intégraux ou énumérations peuvent être initialisées directement dans la classe définition :

class Example {
    static const int initialized = 15;
};

Dans ce cas, la définition dans le fichier d'implémentation doit omettre le initializer :

const int Example::initialized;

Données membres statiques dans les modèles

Pour les modèles, les données membres statiques sont définies dans le fichier d'en-tête avec la déclaration de classe. L'exception à la règle de définition unique autorise plusieurs définitions de données statiques membres de modèles de classe.

Autres utilisations de « statique »

Au-delà de la portée de la classe, « statique » a significations supplémentaires :

  • Dans la portée de la fonction, il crée un objet persistant qui conserve sa valeur tout au long de la fonction appels.
  • Au niveau de l'espace de noms, il déclare des objets et des fonctions avec des liens internes, bien que cette utilisation soit déconseillée pour les 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!

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