Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebe ich den Fehler „Ungelöstes externes Symbol“ beim Zuweisen zu einem statischen Objektfeld?

Wie behebe ich den Fehler „Ungelöstes externes Symbol“ beim Zuweisen zu einem statischen Objektfeld?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-31 16:03:18717Durchsuche

How Do I Resolve the

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!

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