Heim >Backend-Entwicklung >C++ >Warum erhalte ich bei der Kreuzkompilierung die Fehlermeldung „Undefinierter Verweis auf statisches Mitglied'?

Warum erhalte ich bei der Kreuzkompilierung die Fehlermeldung „Undefinierter Verweis auf statisches Mitglied'?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 20:46:10615Durchsuche

Why Do I Get

Ungelöster Verweis auf ein statisches Mitglied in der Cross-Compilierung

Bei der Arbeit mit Cross-Compilern kommt es häufig zu Fehlern im Zusammenhang mit ungelösten Verweisen auf statisches Element Mitglieder. Dies tritt auf, wenn eine statische Variable in einem Klassenheader deklariert, aber nicht in der entsprechenden CPP-Datei definiert ist.

Problemerklärung:

Bedenken Sie das bereitgestellte Codebeispiel:

class WindowsTimer {
public:
  WindowsTimer() {
    _frequency.QuadPart = 0ull;
  } 
private:
  static LARGE_INTEGER _frequency;
};

Die statische Variable _frequenz wird innerhalb der Klassendefinition deklariert, ist aber nicht definiert. Beim Versuch, den Code zu erstellen, kann der Linker den Verweis auf _frequenz nicht auflösen, was zu einem undefinierten Verweisfehler führt.

Lösung:

Um dieses Problem zu beheben, muss der Die statische Variable muss in der entsprechenden CPP-Datei definiert werden. Dies kann wie folgt erfolgen:

// WindowsTimer.cpp
LARGE_INTEGER WindowsTimer::_frequency;

Begründung:

Statische Variablen werden im Gegensatz zu Instanzvariablen von allen Instanzen einer Klasse gemeinsam genutzt. Daher erfordern sie eine einzige Definition im Programm. Durch Definieren der statischen Variablen in der .cpp-Datei kann der Linker den Verweis darauf erfolgreich finden und auflösen.

Zusätzliche Hinweise:

  • Die Fehlermeldung „undefinierter Verweis auf WindowsTimer::_frequenz“ gibt explizit an, dass der Linker keine Definition für die Variable _frequenz im Kontext der Klasse finden kann WindowsTimer`.
  • Ändern der Deklaration von _frequenz als LARGE_INTEGER _frequenz.QuadPart = 0ull; oder static LARGE_INTEGER _frequenz.QuadPart = 0ull; wird das Problem nicht lösen, da diese Deklarationen nur für die einzelne Instanz von _frequenz innerhalb des Objekts gelten und nicht für die statische Definition.
  • Es ist wichtig sicherzustellen, dass die Definition der statischen Variablen in der .cpp-Datei übereinstimmt die Deklaration in der Header-Datei. Nichtübereinstimmungen können zu unerwartetem Verhalten oder Kompilierungsfehlern führen.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich bei der Kreuzkompilierung die Fehlermeldung „Undefinierter Verweis auf statisches Mitglied'?. 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