Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que j'obtiens l'erreur \"Référence non définie à \'Bar::kConst\'\" en C ?

Pourquoi est-ce que j'obtiens l'erreur \"Référence non définie à \'Bar::kConst\'\" en C ?

DDD
DDDoriginal
2024-10-31 10:12:32923parcourir

Why Do I Get the

Référence non définie à l'erreur 'Bar::kConst' en C

En C, lorsqu'un programme tente de référencer une variable membre const statique au sein d'une classe, telle que Bar::kConst dans l'extrait de code donné, il peut rencontrer une erreur « Référence non définie à 'Bar::kConst' ». Cette erreur indique que le compilateur ne trouve pas la définition de la variable.

Selon les normes C (section 9.4.2/4), une donnée membre statique avec un type intégral ou énumération constante peut être initialisée dans la classe définition. Cependant, il doit toujours être explicitement défini dans une portée d'espace de noms s'il est utilisé dans le programme.

Dans l'exemple fourni, le static const int kConst est déclaré dans la classe Bar, mais n'est pas défini, car il est initialisé dans la déclaration. Lorsque la fonction foo est appelée dans la méthode Bar::func, elle tente de transmettre kConst par référence const. Ceci est considéré comme une "utilisation" de la variable, selon la norme C (section 3.2/2). Étant donné que la variable n'est pas explicitement définie, le compilateur ne peut pas effectuer la substitution nécessaire et génère l'erreur.

Pour résoudre cette erreur, on peut soit définir explicitement la variable kConst dans une portée d'espace de noms, soit, comme indiqué dans le code extrait de code, convertissez explicitement kConst en un entier temporaire à l'aide d'un static_cast, forçant le compilateur à effectuer la substitution au moment de la compilation.

En conclusion, l'erreur "Référence non définie à 'Bar::kConst'" se produit car l'extrait de code statique La variable membre const n'est pas explicitement définie, ce qui est requis lorsqu'elle est utilisée dans le programme. Il est important de respecter les normes C lors de la déclaration et de l'utilisation de données membres statiques pour éviter de telles erreurs.

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