Maison  >  Article  >  développement back-end  >  Pourquoi un « Symbole externe non résolu » se produit-il lors de la définition de champs statiques en C ?

Pourquoi un « Symbole externe non résolu » se produit-il lors de la définition de champs statiques en C ?

DDD
DDDoriginal
2024-10-31 13:45:02780parcourir

Why Does

Symbole externe non résolu : compréhension des déclarations de champs statiques

Lorsque vous essayez de définir un champ statique dans une classe sur une valeur différente à partir de la classe principale méthode, vous pouvez rencontrer l'erreur « symbole externe non résolu » (erreur LNK2001 : symbole externe non résolu). Cela se produit généralement si le champ statique n'est pas correctement initialisé en dehors de la définition de classe.

Selon la référence C, une déclaration d'un membre de données statique à l'intérieur d'une définition de classe est considérée comme une déclaration et non une définition. Pour définir le champ statique, il doit être déclaré en dehors de la définition de classe, dans une portée d'espace de noms entourant la définition de classe.

Par exemple, considérons le code suivant :

<code class="cpp">class A
{
public:
    A()
    {

    }
};

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

int main()
{
    B::a = new A;  // Error
}</code>

Dans ce cas , le champ statique B::a est déclaré dans la définition de classe, mais n'est pas défini. Pour résoudre cette erreur, vous devez déplacer la définition du champ statique en dehors de la définition de la classe, comme indiqué ci-dessous :

<code class="cpp">class A
{
public:
    A()
    {

    }
};

class B
{
public:
};

// Static field definition outside the class
A* B::a = nullptr;

int main()
{
    B::a = new A;  // No error
}</code>

Cette modification garantit que le champ statique est correctement défini et peut être utilisé dans la méthode principale. . En suivant la règle d'une définition, vous pouvez éviter les erreurs de « symbole externe non résolu » et vous assurer que vos champs statiques sont correctement liés.

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