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!