Maison >développement back-end >C++ >Pourquoi mon tableau statique « constexpr char » provoque-t-il une « référence non définie » ?

Pourquoi mon tableau statique « constexpr char » provoque-t-il une « référence non définie » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-21 15:15:23479parcourir

Why Does My Static `constexpr char` Array Cause an

Référence non définie à Static constexpr char[]

Lorsque vous essayez de créer un tableau de caractères const statique en tant que membre d'une classe, vous pouvez rencontrer l'erreur "référence non définie à baz."

Explication :

GCC vous oblige à utiliser constexpr pour les tableaux const statiques. Cependant, placer la déclaration de tableau et l'initialiseur dans la définition de classe n'est pas suffisant. Vous devez également fournir une définition de membre distincte dans le fichier .cpp.

Pour résoudre ce problème :

  1. Dans votre fichier .cpp, ajoutez le ligne suivante après la déclaration de classe :

    constexpr char foo::baz[];

    Ceci déclare la définition du membre statique baz.

  2. Laissez la déclaration et l'initialisation du tableau dans la définition de la classe :

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

Raison :

La définition de classe fournit la déclaration et l'initialiseur du membre statique. Toutefois, la définition du membre, qui alloue de la mémoire et initialise le tableau, doit être fournie séparément dans le fichier .cpp. En ajoutant cette définition, l'éditeur de liens pourra trouver le symbole baz et résoudre la 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!

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