Heim >Backend-Entwicklung >C++ >Warum erhalte ich „Undefinierte Referenzen', wenn ich statische Klassenmitglieder in C verwende?

Warum erhalte ich „Undefinierte Referenzen', wenn ich statische Klassenmitglieder in C verwende?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-11 03:07:08745Durchsuche

Why Do I Get

Undefinierte Verweise auf statische Klassenmitglieder

In C müssen statische Mitglieder, die innerhalb von Klassen definiert sind, ordnungsgemäß behandelt werden, um Kompilierungsfehler zu vermeiden.

Grund für undefinierte Referenzen

Statische Mitglieder, obwohl sie darin deklariert sind Klassendefinitionen werden nicht automatisch definiert, sofern dies nicht ausdrücklich an anderer Stelle erfolgt. Dies liegt daran, dass sich Deklarationen von Definitionen in C unterscheiden. Eine Deklaration führt lediglich das Mitglied ein, während eine Definition Speicher zuweist und einen Anfangswert bereitstellt.

Beispiel

Betrachten Sie die folgende Klasse mit einem nicht deklarierten statischen Mitglied:

class Example {
    static bool exampleStaticMember;
};

Der Versuch, exampleStaticMember zu verwenden, ohne es zu definieren, führt zu „undefinierten Referenzen“. Fehler.

Definitionsanforderungen

Um dieses Problem zu beheben, muss das statische Mitglied explizit definiert werden, normalerweise in der Quelldatei (.cpp), die die Klassendefinitionen enthält. Die Definition deklariert das Mitglied einfach erneut mit seinem Datentyp und einem Semikolon (';').

bool Example::exampleStaticMember;

Sonderfälle

  • Const Statische Integral-/Aufzählungsmitglieder: Diese können innerhalb der Klassendefinition initialisiert werden selbst.
  • Statische Vorlagenmitglieder: Statische Mitglieder von Klassenvorlagen müssen in der Header-Datei definiert werden.

Andere statische Verwendungen

Beachten Sie, dass das Schlüsselwort static unterschiedliche Bedeutungen hat, wenn es außerhalb von angewendet wird Klassen:

  • Statische Objekte in Funktionen: Deklariert ein Objekt, das seinen Wert zwischen Funktionsaufrufen behält.
  • Statische Objekte/Funktionen im Namespace-Geltungsbereich: Deklariert Objekte/Funktionen mit interner Verknüpfung.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich „Undefinierte Referenzen', wenn ich statische Klassenmitglieder in C verwende?. 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