Heim >Backend-Entwicklung >C++ >Warum erhalte ich bei statischen constexpr-Char-Arrays in C den Fehler „Undefinierte Referenz'?

Warum erhalte ich bei statischen constexpr-Char-Arrays in C den Fehler „Undefinierte Referenz'?

Linda Hamilton
Linda HamiltonOriginal
2024-12-23 04:07:27446Durchsuche

Why Do I Get an

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!

Stellungnahme:
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