Heim >Backend-Entwicklung >C++ >Warum erhalte ich bei statischen Elementen in C die Fehlermeldung „Undefinierte Referenz'?

Warum erhalte ich bei statischen Elementen in C die Fehlermeldung „Undefinierte Referenz'?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-07 22:27:13437Durchsuche

Why Am I Getting

Undefinierte Verweise auf statische Mitglieder: Ein Leitfaden für Anfänger

Statische Datenmitglieder werden häufig verwendet, um Informationen über Instanzen einer Klasse hinweg auszutauschen. Allerdings stoßen Entwickler bei der Verwendung statischer Datenelemente gelegentlich auf Fehler „undefinierter Verweis“. Dieses Problem entsteht aufgrund der Unterscheidung zwischen Deklarationen und Definitionen.

Deklarationen und Definitionen verstehen

Eine Deklaration stellt dem Compiler die Existenz einer Variablen vor, ohne ihren Speicherort anzugeben. Eine Definition hingegen reserviert Speicher für die Variable und stellt ihre Adresse bereit.

Bei statischen Datenmitgliedern erfolgt ihre Deklaration innerhalb der Klassendefinition, weist ihnen jedoch keine Adresse zu. Die tatsächliche Definition muss separat bereitgestellt werden.

Statische Datenelemente definieren

Um „undefinierte Referenz“-Fehler zu beheben, definieren Sie statische Datenelemente explizit außerhalb der Klassendefinition, normalerweise in die Implementierungsdatei (.cpp). Betrachten Sie beispielsweise den folgenden Code:

// Header file (.h)
class Example {
    static bool exampleStaticMember;
};

// Implementation file (.cpp)
bool Example::exampleStaticMember;

Ausnahme für Integral- und Aufzählungstypen

Statische Datenelemente von Integral- oder Aufzählungstypen können direkt innerhalb der Klasse initialisiert werden Definition:

class Example {
    static const int initialized = 15;
};

In diesem Fall muss die Definition in der Implementierungsdatei weggelassen werden Initialisierer:

const int Example::initialized;

Statische Datenelemente in Vorlagen

Für Vorlagen werden statische Datenelemente zusammen mit der Klassendeklaration in der Header-Datei definiert. Die Ausnahme von der One-Definition-Regel erlaubt mehrere Definitionen von statischen Datenelementen von Klassenvorlagen.

Andere Verwendungen von „static“

Über den Klassenbereich hinaus hat „static“. zusätzliche Bedeutungen:

  • Im Funktionsumfang wird ein persistentes Objekt erstellt, das seinen Wert über die gesamte Funktion hinweg behält Aufrufe.
  • Im Namespace-Bereich werden Objekte und Funktionen mit interner Verknüpfung deklariert, obwohl von dieser Verwendung für Objekte abgeraten wird.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich bei statischen Elementen in C die Fehlermeldung „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