Heim >Backend-Entwicklung >C++ >Warum erzeugt g den Fehler „Undefinierter Verweis auf Typeinfo'?

Warum erzeugt g den Fehler „Undefinierter Verweis auf Typeinfo'?

Susan Sarandon
Susan SarandonOriginal
2024-12-03 06:18:10303Durchsuche

Why Does g   Produce

G: Fehler „Undefinierter Verweis auf Typeinfo“ verstehen

Der Fehler „Undefinierter Verweis auf Typeinfo“ tritt häufig beim Kompilieren von C-Programmen mit auf G . Dies bedeutet, dass der Linker die Typinformationen für eine bestimmte Klasse nicht finden kann, was mehrere Ursachen haben kann.

Ursache: Deklarieren virtueller Funktionen ohne Definitionen

Ein häufiger Grund für Dieser Fehler besteht darin, virtuelle Funktionen zu deklarieren, ohne ihre Definitionen in derselben Kompilierungseinheit bereitzustellen. Wenn Sie eine virtuelle Funktion deklarieren, ohne sie zu definieren, deuten Sie darauf hin, dass ihre Definition an anderer Stelle existiert, entweder in nachfolgenden Kompilierungseinheiten oder externen Bibliotheken.

Daher sucht der Compiler während der Verknüpfungsphase nach der Definition der virtuellen Funktion in anderen Objektdateien oder Bibliotheken. Wenn die Definition nicht gefunden werden kann, wird der Fehler „Undefinierter Verweis auf Typeinfo“ ausgelöst.

Beispiel: Falsche Deklaration

virtual void fn();

Diese Deklaration informiert den Compiler darüber, dass a Es gibt eine virtuelle Funktion namens fn(), die jedoch keine konkrete Implementierung bereitstellt.

Beispiel: Richtig Definition

virtual void fn() { /* Implementation code here */ }

Wenn Sie der virtuellen Funktion eine Definition bereitstellen, muss der Linker nicht mehr anderswo danach suchen, wodurch der Fehler behoben wird.

Analogie: Extern Variablenauflösung

Das Verhalten ähnelt der Deklaration einer externen Variablen in einer Kompilierungseinheit und dem Versuch, in einer anderen Einheit darauf zuzugreifen, ohne eine explizite Variable bereitzustellen Definition:

extern int i;
int *pi = &i;

Hier wird die Variable i extern deklariert, was darauf hinweist, dass ihre Definition in einer anderen Kompilierungseinheit liegt. Wenn diese Definition zum Linkzeitpunkt nicht verfügbar ist, generiert der Compiler einen Fehler „Undefinierte Referenz“.

Das Verständnis der Grundursache dieses Fehlers ist entscheidend, um ihn zu vermeiden und eine erfolgreiche Kompilierung Ihres C-Codes sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum erzeugt g den Fehler „Undefinierter Verweis auf Typeinfo'?. 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