Heim > Artikel > Backend-Entwicklung > Warum tritt beim Festlegen statischer Felder in C ein „Unaufgelöstes externes Symbol“ auf?
Ungelöstes externes Symbol: Statische Felddeklarationen verstehen
Beim Versuch, ein statisches Feld in einer Klasse auf einen anderen Wert als innerhalb der Hauptklasse festzulegen Bei dieser Methode kann der Fehler „unresolved external symbol“ (Fehler LNK2001: unresolved external symbol) auftreten. Dies tritt normalerweise auf, wenn das statische Feld außerhalb der Klassendefinition nicht ordnungsgemäß initialisiert wird.
Gemäß der C-Referenz wird eine Deklaration eines statischen Datenelements innerhalb einer Klassendefinition als Deklaration und nicht als Definition betrachtet. Um das statische Feld zu definieren, muss es außerhalb der Klassendefinition in einem Namespace-Bereich deklariert werden, der die Klassendefinition umschließt.
Betrachten Sie beispielsweise den folgenden Code:
<code class="cpp">class A { public: A() { } }; class B { public: static A* a; // Declaration only }; int main() { B::a = new A; // Error }</code>
In diesem Fall , das statische Feld B::a wird innerhalb der Klassendefinition deklariert, aber nicht definiert. Um diesen Fehler zu beheben, müssen Sie die Definition des statischen Felds außerhalb der Klassendefinition verschieben, wie unten gezeigt:
<code class="cpp">class A { public: A() { } }; class B { public: }; // Static field definition outside the class A* B::a = nullptr; int main() { B::a = new A; // No error }</code>
Diese Änderung stellt sicher, dass das statische Feld ordnungsgemäß definiert ist und innerhalb der Hauptmethode verwendet werden kann . Indem Sie die One-Definition-Regel befolgen, können Sie „ungelöste externe Symbol“-Fehler verhindern und sicherstellen, dass Ihre statischen Felder korrekt verknüpft sind.
Das obige ist der detaillierte Inhalt vonWarum tritt beim Festlegen statischer Felder in C ein „Unaufgelöstes externes Symbol“ auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!