Heim >Backend-Entwicklung >C++ >Warum erhalte ich beim Festlegen eines statischen Felds in C die Fehlermeldung „Unaufgelöstes externes Symbol'?

Warum erhalte ich beim Festlegen eines statischen Felds in C die Fehlermeldung „Unaufgelöstes externes Symbol'?

Susan Sarandon
Susan SarandonOriginal
2024-11-01 01:35:28175Durchsuche

Why Am I Getting

Unaufgelöstes externes Symbol für statisches Objektfeld

In diesem Artikel wird die Fehlermeldung „Fehler LNK2001: unaufgelöstes externes Symbol“ untersucht, die beim Festlegen auftritt ein statisches Feld in einer Klasse aus der Hauptmethode.

Im bereitgestellten Code-Snippet ist die Deklaration von Das statische Feld „a“ in der Klasse „B“ kommt innerhalb der Klassendefinition selbst vor. Nach dem C-Standard gelten solche Deklarationen jedoch nicht als Definitionen. Für statische Datenelemente muss die richtige Definition außerhalb der Klasse im umschließenden Namespace-Bereich unter Verwendung des Operators „::“ erscheinen.

Die Regel, die diese Anforderung regelt, ist als One Definition Rule (ODR) bekannt. was vorschreibt, dass jede Entität (einschließlich statischer Datenelemente) eine einzige eindeutige Definition im gesamten Programm hat. Diese Regel stellt sicher, dass hinsichtlich des Werts des statischen Elements keine Unklarheiten bestehen.

Um den Fehler zu beheben, sollte der Code daher wie folgt geändert werden, wobei „a“ im Namespace-Bereich definiert ist:

<code class="cpp">class A
{
public:
    A()
    {

    }
};

class B
{
public:
    static A* a;
};

A* B::a; // Definition in namespace scope

int main()
{
    B::a = new A;
}</code>

Durch die explizite Definition des statischen Mitglieds außerhalb der Klasse kann der Linker die Symbolreferenz korrekt auflösen und der Code wird erfolgreich kompiliert.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich beim Festlegen eines statischen Felds in C die Fehlermeldung „Unaufgelöstes externes Symbol'?. 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