Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que j'obtiens l'erreur « Symbole externe non résolu » lors de la définition d'un champ statique en C ?

Pourquoi est-ce que j'obtiens l'erreur « Symbole externe non résolu » lors de la définition d'un champ statique en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-01 01:35:28114parcourir

Why Am I Getting

Symbole externe non résolu pour le champ d'objet statique

Cet article examine le message d'erreur « Erreur LNK2001 : symbole externe non résolu » rencontré lors de la tentative de définition un champ statique dans une classe à partir de la méthode principale.

Dans l'extrait de code fourni, la déclaration du champ statique "a" dans la classe "B" se produit dans la définition de classe elle-même. Cependant, selon la norme C, ces déclarations ne sont pas considérées comme des définitions. Pour les données membres statiques, la définition appropriée doit apparaître en dehors de la classe dans la portée de l'espace de noms englobant, à l'aide de l'opérateur "::".

La règle qui régit cette exigence est connue sous le nom de règle de définition unique (ODR). qui exige que chaque entité (y compris les membres de données statiques) ait une seule définition unique dans l'ensemble du programme. Cette règle garantit qu'il n'y a pas d'ambiguïté concernant la valeur du membre statique.

Par conséquent, pour résoudre l'erreur, le code doit être modifié comme suit, où "a" est défini dans la portée de l'espace de noms :

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

    }
};

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

A* B::a; // Definition in namespace scope

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

En définissant explicitement le membre statique en dehors de la classe, l'éditeur de liens peut résoudre correctement la référence du symbole et le code sera compilé avec succè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