Maison > développement back-end > C++ > Pourquoi est-ce que j'obtiens une erreur « Référence non définie » lors de l'utilisation d'un tableau de caractères constexpr statique dans une méthode de classe ?

Pourquoi est-ce que j'obtiens une erreur « Référence non définie » lors de l'utilisation d'un tableau de caractères constexpr statique dans une méthode de classe ?

Barbara Streisand
Libérer: 2024-12-23 08:41:17
original
749 Les gens l'ont consulté

Why Do I Get an

Référence non définie au char constexpr statique[]

Lorsque vous tentez d'accéder à un tableau de caractères constexpr statique dans une méthode de classe, vous pouvez rencontrer une erreur "référence non définie". Ce problème survient lorsque la déclaration et l'initialisation du tableau se produisent dans la définition de la classe, mais que la définition elle-même est omise.

Problème :

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

// implementation file (.cpp)
void foo::bar() {
  std::string str(baz); // "undefined reference to baz" error
}
Copier après la connexion

Solution :

Pour résoudre ce problème, vous devez fournir une définition distincte pour le membre statique dans le fichier d'implémentation (.cpp) dans ajout à la déclaration dans la définition de classe (.hpp) :

// implementation file (.cpp)
constexpr char foo::baz[]; // Definition
Copier après la connexion

Explication :

Le compilateur a besoin à la fois de la déclaration et de la définition du membre statique pour connaître son emplacement mémoire et sa valeur initiale. La déclaration dans la définition de classe spécifie uniquement le type et le nom du membre, tandis que la définition fournit l'allocation de mémoire et l'initialisation réelles. En séparant la définition de la déclaration, vous vous assurez que le compilateur dispose de toutes les informations nécessaires pour lier le membre à sa définition lors de la compilation.

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