Verstehen des Fehlers „Unaufgelöstes externes Symbol“ für die Feldzuweisung eines statischen Objekts
Beim Schreiben von Code kann es vorkommen, dass Sie ein zuweisen müssen Wert in ein statisches Objektfeld einer anderen Klasse einfügen. Der Versuch einer solchen Zuweisung kann jedoch zu einem Verknüpfungsfehler mit der Meldung „unaufgelöstes externes Symbol“ führen.
Betrachten Sie ein vereinfachtes Codebeispiel:
<code class="cpp">class A { public: A() {} }; class B { public: static A* a; }; int main() { B::a = new A; }</code>
Der Versuch, diesen Code zu kompilieren, führt zu der Fehler:
error LNK2001: unresolved external symbol "public: static class A * B::a" (?a@B@@2PAVA@@A)
Dieser Fehler tritt auf, weil statische Objektfelder nicht implizit in ihren Klassendeklarationen definiert sind. Gemäß dem C-Referenzstandard ist „die Deklaration eines statischen Datenelements innerhalb einer Klassendefinition keine Definition und kann von einem unvollständigen Typ sein.“
Regel für die Definition statischer Objektfelder
Um diesen Fehler zu beheben, müssen Sie das statische Objektfeld explizit außerhalb der Klassendefinition definieren. Diese Regel gilt für alle statischen Objektfelder, unabhängig von ihrer Zugänglichkeit oder Veränderbarkeit.
Beispieldefinition:
<code class="cpp">A* B::a = nullptr;</code>
Das Platzieren der Definition im umschließenden Namespace-Bereich stellt dies sicher Der Linker kann das Symbol finden, wenn er versucht, die Zuweisung in main() aufzulösen.
Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Ungelöstes externes Symbol' beim Zuweisen zu einem statischen Objektfeld?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!