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 » ?
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>
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>
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!