Maison > développement back-end > C++ > Pourquoi la définition d'un champ statique à partir de la méthode principale provoque-t-elle une erreur « Symbole externe non résolu » ?

Pourquoi la définition d'un champ statique à partir de la méthode principale provoque-t-elle une erreur « Symbole externe non résolu » ?

Linda Hamilton
Libérer: 2024-10-31 06:33:02
original
874 Les gens l'ont consulté

Why Does Setting a Static Field from the Main Method Cause an

Erreur de symbole externe non résolue : définition d'un champ statique à partir de la méthode principale

Lorsque vous essayez de mettre à jour un champ statique dans une classe à partir de la méthode principale, les développeurs peuvent rencontrer l'erreur « LNK2001 : symbole externe non résolu ». Cette erreur se produit en raison d'une règle spécifique qui nécessite que les membres de classe statiques soient définis en dehors de la définition de classe pour une liaison correcte.

Considérez le code suivant :

<code class="cpp">class A
{
public:
    A() { /* Implementation */ }
};

class B
{
public:
    static A* a;
};

int main()
{
    B::a = new A; // Attempting to set the static field
}</code>
Copier après la connexion

Dans ce code, nous essayons pour définir le champ statique a de la classe B sur un nouvel objet A à partir de la méthode principale. Cependant, le compilateur générera l'erreur "LNK2001" car la définition de a est manquante.

Selon la norme C, les déclarations de données membres statiques dans les définitions de classe ne sont pas considérées comme des définitions. Au lieu de cela, les définitions doivent être fournies en dehors de la classe dans une portée d'espace de noms à l'aide du nom de classe et de l'opérateur ::. Voici le code corrigé :

<code class="cpp">class A
{
public:
    A() { /* Implementation */ }
};

class B
{
public:
    static A* a; // Declaration
};

// Definition of static field outside the class
A* B::a;

int main()
{
    B::a = new A; // Setting the static field
}</code>
Copier après la connexion

En définissant un en dehors de la classe, le compilateur peut lier correctement le symbole et permettre de modifier le champ statique depuis la méthode main.

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