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 main.
Dans l'extrait de code fourni, la déclaration du champ statique "a" dans la classe "B" apparaît 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 aucune 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 :
class A
{
public:
A()
{
}
};
class B
{
public:
static A* a;
};
A* B::a; // Definition in namespace scope
int main()
{
B::a = new A;
}
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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3