Maison  >  Article  >  développement back-end  >  Comment puis-je résoudre l'erreur « Symbole externe non résolu » lors de l'attribution à un champ d'objet statique ?

Comment puis-je résoudre l'erreur « Symbole externe non résolu » lors de l'attribution à un champ d'objet statique ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 16:03:18720parcourir

How Do I Resolve the

Comprendre l'erreur « Symbole externe non résolu » pour l'attribution de champs d'objet statique

Lors de l'écriture de code, vous pouvez rencontrer des situations dans lesquelles vous devez attribuer un valeur à un champ d’objet statique d’une classe différente. Cependant, tenter une telle affectation peut entraîner une erreur de liaison avec le message « symbole externe non résolu ».

Considérons un exemple de code simplifié :

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

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

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

Tenter de compiler ce code entraînera l'erreur :

error LNK2001: unresolved external symbol "public:
static class A * B::a" (?a@B@@2PAVA@@A)

Cette erreur se produit car les champs d'objets statiques ne sont pas implicitement définis dans leurs déclarations de classe. Selon la norme de référence C, "La déclaration d'un membre de données statique à l'intérieur d'une définition de classe n'est pas une définition et peut être d'un type incomplet."

Règle de définition des champs d'objets statiques

Pour résoudre cette erreur, vous devez définir explicitement le champ de l'objet statique en dehors de la définition de la classe. Cette règle s'applique à tous les champs d'objets statiques, quelle que soit leur accessibilité ou leur mutabilité.

Exemple de définition :

<code class="cpp">A* B::a = nullptr;</code>

Placer la définition dans la portée de l'espace de noms englobant garantit que l'éditeur de liens peut trouver le symbole en essayant de résoudre l'affectation dans 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!

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