Maison > développement back-end > C++ > le corps du texte

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

Patricia Arquette
Libérer: 2024-10-31 16:03:18
original
717 Les gens l'ont consulté

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>
Copier après la connexion

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

error LNK2001: unresolved external symbol "public:
static class A * B::a" (?a@B@@2PAVA@@A)
Copier après la connexion

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>
Copier après la connexion

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!