Heim >Backend-Entwicklung >C++ >Warum erhalte ich bei statischen constexpr-Char-Arrays in C den Fehler „Undefinierte Referenz'?
Undefinierte Referenz auf statisches constexpr-Char-Array: Verständnis des undefinierten Referenzproblems
In der Programmiersprache C ist es möglich, statische Konstanten zu definieren Zeichenarrays innerhalb einer Klasse. Beim Versuch, solche Arrays in ihrem Code zu referenzieren, kann es jedoch vorkommen, dass Entwickler auf den Fehler „Undefinierte Referenz“ stoßen. Dieser Fehler tritt auf, weil der Compiler sowohl eine Deklaration als auch eine Definition des statischen Members benötigt.
Um dieses Problem zu beheben, sollte der Code wie folgt geändert werden. In der Klassendefinition (.hpp-Datei) sollten die Deklaration und Initialisierung des statischen Arrays innerhalb der Klasse bleiben. In der Implementierungsdatei (.cpp-Datei) sollte eine separate Zeile hinzugefügt werden, um die Definition des statischen Arrays bereitzustellen.
// .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
Durch die separate Bereitstellung der Definition des statischen Elements kann der Compiler die Referenz verknüpfen korrekt an das Array an, wodurch der undefinierte Referenzfehler behoben wird. Diese Trennung zwischen Deklaration und Definition ist notwendig, da die Größe des Arrays während der Kompilierung bekannt sein muss, während seine Initialisierung auf einen späteren Zeitpunkt verschoben werden kann.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich bei statischen constexpr-Char-Arrays in C den Fehler „Undefinierte Referenz'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!