Erreur inattendue : "Référence non définie à un char constexpr statique[]" dans la définition de classe
Rencontre d'une "Référence non définie à un char constexpr statique[] ]" lors de la définition d'un tableau de caractères const statique au sein d'une classe peut être déroutante. Examinons le problème et explorons la solution.
Comme souligné dans le message d'erreur, le compilateur attend une définition pour le membre statique. Dans l'extrait de code fourni, vous avez inclus la déclaration et l'initialiseur dans la définition de classe, mais vous n'avez pas fourni la définition distincte dans le fichier .cpp.
Pour résoudre ce problème, suivez ces étapes :
Dans le fichier .cpp, ajoutez le définition en déclarant le membre statique sans l'initialiseur, comme indiqué ci-dessous :
constexpr char foo::baz[];
Maintenir la déclaration de classe et initialiseur pour le membre statique dans le fichier .hpp tel qu'il is.
Explication :
En C , les membres statiques se voient allouer de la mémoire lors de la compilation et sont partagés entre toutes les instances de la classe. Lors de la définition d'un tableau de caractères const statique, la déclaration et l'initialiseur doivent être inclus dans le fichier d'en-tête (.hpp). Cependant, la définition (sans l'initialiseur) doit être fournie séparément dans le fichier d'implémentation (.cpp) pour résoudre le problème de liaison. Cela garantit que la définition du membre statique est accessible lors de la liaison, résolvant ainsi l'erreur « Référence non définie ».
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!