Heim >Backend-Entwicklung >C++ >Was verursacht „Undefinierte Referenz auf statisches Mitglied'-Fehler in C und wie werden sie behoben?

Was verursacht „Undefinierte Referenz auf statisches Mitglied'-Fehler in C und wie werden sie behoben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-09 00:39:13662Durchsuche

What Causes

Was bedeutet es, einen undefinierten Verweis auf ein statisches Mitglied zu haben?

In C ist eine statische Mitgliedsvariable eine Klassenvariable, die unabhängig von einer Objektinstanz existiert . Sie wird normalerweise zur Kompilierungszeit initialisiert und kann von allen Instanzen der Klasse gemeinsam genutzt werden.

Wenn Sie jedoch eine statische Mitgliedsvariable deklarieren, ohne eine Definition anzugeben, generiert der Compiler eine Fehlermeldung über eine „undefinierte Referenz“. ." Dies liegt daran, dass der Compiler den Speicherort der statischen Variablen kennen muss, um Code zu generieren, der darauf zugreift.

Um diesen Fehler zu beheben, müssen Sie eine Definition für die statische Mitgliedsvariable in einer Quelldatei bereitstellen ( .cpp-Datei). Die Definition sollte denselben Namen wie die Deklaration in der Header-Datei (.h-Datei) haben, ihr sollte jedoch der Bereichsoperator (::) vorangestellt sein. Zum Beispiel:

// header file
class Example {
public: 
    static int x;
};

// source file
int Example::x;

Dies definiert den Speicherort für die statische Variable x und ermöglicht es dem Compiler, Code zu generieren, der darauf zugreift.

Sonderfälle

  • Const-Integral- oder Aufzählungstypen: Für statische Mitgliedsvariablen, die vom Typ „Const-Integral“ oder „Const“ sind Für Aufzählungstypen können Sie in der Klassendeklaration in der Header-Datei einen Initialisierer bereitstellen. Die Definition in der Quelldatei sollte keinen Initialisierer haben.
  • Vorlagen: Für statische Mitgliedsvariablen von Klassenvorlagen muss die Definition zusammen mit der Klassendefinition in der Header-Datei bereitgestellt werden.

Andere Verwendungen von static

Das Schlüsselwort static hat unterschiedliche Bedeutungen, wenn es auf Objekte angewendet wird oder Funktionen, die nicht in einem Klassenbereich liegen:

  • Objekte im Funktionsbereich: Deklariert ein Objekt, das bei der ersten Ausführung der Funktion initialisiert wird und seinen Wert zwischen Funktionsaufrufen behält .
  • Objekte oder Funktionen im Namespace-Bereich: Deklariert Objekte oder Funktionen mit interner Verknüpfung, was veraltet ist Objekte.

Das obige ist der detaillierte Inhalt vonWas verursacht „Undefinierte Referenz auf statisches Mitglied'-Fehler in C und wie werden sie behoben?. 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