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 }
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
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!