Heim > Backend-Entwicklung > C++ > Warum verursacht mein statisches „constexpr char'-Array eine „undefinierte Referenz'?

Warum verursacht mein statisches „constexpr char'-Array eine „undefinierte Referenz'?

Patricia Arquette
Freigeben: 2024-12-21 15:15:23
Original
581 Leute haben es durchsucht

Why Does My Static `constexpr char` Array Cause an

Undefinierter Verweis auf statisches constexpr char[]

Wenn Sie versuchen, als Mitglied einer Klasse ein statisches const char-Array zu erstellen, können Sie dies tun Es tritt der Fehler „undefinierter Verweis auf“ auf baz."

Erklärung:

GCC erfordert die Verwendung von constexpr für statische Const-Arrays. Allerdings reicht es nicht aus, die Array-Deklaration und den Initialisierer allein in der Klassendefinition zu platzieren. Sie müssen außerdem eine separate Mitgliedsdefinition in der CPP-Datei bereitstellen.

Um dieses Problem zu beheben:

  1. Fügen Sie in Ihrer CPP-Datei die hinzu Folgende Zeile nach der Klassendeklaration:

    constexpr char foo::baz[];
    Nach dem Login kopieren

    Dies deklariert die Definition des statischen Mitglieds baz.

  2. Belassen Sie die Deklaration und Initialisierung des Arrays innerhalb der Klassendefinition:

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

Grund:

Die Klassendefinition stellt die Deklaration und den Initialisierer des statischen Mitglieds bereit. Allerdings muss die Memberdefinition, die Speicher zuweist und das Array initialisiert, separat in der .cpp-Datei bereitgestellt werden. Durch Hinzufügen dieser Definition kann der Linker das Symbol baz finden und die undefinierte Referenz auflösen.

Das obige ist der detaillierte Inhalt vonWarum verursacht mein statisches „constexpr char'-Array eine „undefinierte Referenz'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage