„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum bekomme ich \ "undefinierte Referenz" Fehler mit statischen Mitgliedern in C ++?

Warum bekomme ich \ "undefinierte Referenz" Fehler mit statischen Mitgliedern in C ++?

Gepostet am 2025-03-25
Durchsuche:200

Why Am I Getting \

undefinierte Verweise auf statische Mitglieder: Ein Anfängerhandbuch

statische Datenmitglieder werden häufig verwendet, um Informationen über Instanzen einer Klasse zu teilen. Entwickler begegnen jedoch gelegentlich "undefinierte Referenz" -Fehler bei der Verwendung statischer Datenelemente. Dieses Problem tritt aufgrund der Unterscheidung zwischen Erklärungen und Definitionen auf.

Verständnis von Erklärungen und Definitionen

Eine Deklaration führt dem Compiler dem Kompiler vor, ohne ihren Speicherort anzugeben. Eine Definition andererseits verteilt eine Speicher für die Variable und liefert ihre Adresse.

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

definieren statische Datenmitglieder

, um "undefined Referenz" Fehler zu beheben, explizit statische Datenmitglieder außerhalb der Klassendefinition, typischerweise in der Implementierungsdatei (.cpp). Betrachten Sie zum Beispiel den folgenden Code:

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

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

Ausnahme für Integral- und Aufzählungsarten

statische Datenmitglieder von integralen oder Aufzählungen können direkt innerhalb der Klassendefinition initialisiert werden:

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

In this case, the definition in the implementation file must omit the initializer:

const int Example::initialized;

Static Data Members in Templates

For templates, static data members are defined within the header file along with the class declaration. The exception to the One Definition Rule allows multiple definitions of static data members of class templates.

Other Uses of "static"

Beyond class scope, "static" has additional meanings:

  • Within function scope, it creates a persistent object that retains its value across function Anrufe.
  • In Namespace Scope deklariert es Objekte und Funktionen mit interner Verknüpfung, obwohl diese Verwendung für Objekte entmutigt ist.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3