Undefinierter Verweis auf Typeinfo: Ursachen und Lösung
Der gefürchtete Fehler „Undefinierter Verweis auf Typeinfo“ kann C-Entwickler plagen und ihnen Rätsel aufgeben seine Ursprünge. Hinter den Kulissen tritt dieser Fehler auf, wenn der Linker auf eine virtuelle Funktionsdeklaration ohne entsprechende Definition stößt.
Virtuelle Funktionen sind so konzipiert, dass sie in abgeleiteten Klassen überschrieben werden können, was polymorphes Verhalten ermöglicht. Die Deklaration einer virtuellen Funktion ohne ihre Definition impliziert jedoch, dass sich die Definition an einer anderen Stelle befindet. Dadurch wird der Linker gezwungen, externe Kompilierungseinheiten oder Bibliotheken nach der fehlenden Definition zu durchsuchen. Wenn der Linker es nicht findet, erscheint der Fehler „undefinierter Verweis auf Typeinfo“.
Beachten Sie diese Deklaration:
virtual void fn();
Diese Deklaration informiert den Compiler darüber, dass fn() eine virtuelle Funktion ist stellt jedoch nicht die Implementierung bereit. Der Linker markiert dies während der Verknüpfungsphase als ungelöstes Symbol, was zu dem Fehler führt.
Um dies zu beheben, müssen Sie eine Definition für die virtuelle Funktion bereitstellen:
virtual void fn() { /* Implementation here */ }
Durch Anhängen Wenn Sie der Deklaration eine Definition hinzufügen, muss der Linker nicht mehr nach einem fehlenden Symbol suchen.
Dieser Fehler ist analog zum folgenden Code Ausschnitt:
extern int i; int *pi = &i;
In diesem Fall wird i als externe Variable deklariert, die sich in einer anderen Kompilierungseinheit befindet. Dies erfordert, dass der Linker die externe Referenz auflöst, aber wenn er i nicht finden kann, meldet er einen ungelösten Symbolfehler.
Wenn Entwickler die grundlegende Ursache des Fehlers „undefinierter Verweis auf Typeinfo“ verstehen, können sie den Fehler umgehend beheben und lösen Sie das Problem, indem Sie geeignete Definitionen für virtuelle Funktionen bereitstellen oder externe Symbolreferenzen entsprechend behandeln.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in C den Fehler „Undefinierter Verweis auf Typeinfo'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!