Maison > développement back-end > C++ > Pourquoi est-ce que j'obtiens une erreur « Référence non définie » avec les tableaux de caractères constexpr statiques en C ?

Pourquoi est-ce que j'obtiens une erreur « Référence non définie » avec les tableaux de caractères constexpr statiques en C ?

Linda Hamilton
Libérer: 2024-12-23 04:07:27
original
444 Les gens l'ont consulté

Why Do I Get an

Référence non définie au tableau de caractères constexpr statique : comprendre le problème de référence non définie

Dans le langage de programmation C, il est possible de définir une constante statique tableaux de caractères au sein d’une classe. Cependant, les développeurs peuvent rencontrer une erreur « référence non définie » lorsqu'ils tentent de référencer de tels tableaux dans leur code. Cette erreur se produit car le compilateur nécessite à la fois une déclaration et une définition du membre statique.

Pour résoudre ce problème, le code doit être modifié comme suit. Dans la définition de la classe (fichier .hpp), la déclaration et l'initialisation du tableau statique doivent rester à l'intérieur de la classe. Dans le fichier d'implémentation (fichier .cpp), une ligne distincte doit être ajoutée pour fournir la définition du tableau statique.

// .hpp
struct foo {
  void bar();
  static constexpr char baz[] = "quz";
};

// .cpp
void foo::bar() {
  std::string str(baz); // now compiles successfully
}

constexpr char foo::baz[]; // definition of static member
Copier après la connexion

En fournissant la définition du membre statique séparément, le compilateur peut lier la référence au tableau correctement, résolvant l'erreur de référence non définie. Cette séparation entre déclaration et définition est nécessaire car la taille du tableau doit être connue lors de la compilation, tandis que son initialisation peut être différée à plus tard.

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