Heim  >  Artikel  >  Backend-Entwicklung  >  Warum tritt beim Festlegen statischer Felder in C ein „Unaufgelöstes externes Symbol“ auf?

Warum tritt beim Festlegen statischer Felder in C ein „Unaufgelöstes externes Symbol“ auf?

DDD
DDDOriginal
2024-10-31 13:45:02782Durchsuche

Why Does

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!

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