Verstehen von „g undefinierter Referenz auf Typeinfo“-Fehlern
Wenn Sie auf „undefinierte Referenz auf Typeinfo“-Linkerfehler stoßen, ist es wichtig, sich damit zu befassen die zugrunde liegenden Gründe für diese Meldungen. Eine mögliche Ursache liegt darin, virtuelle Funktionen zu deklarieren, ohne ihre Definitionen anzugeben.
Virtuelle Funktionen ermöglichen Polymorphismus, sodass abgeleitete Klassen von ihren Basisklassen geerbte Methoden überschreiben und unterschiedliche Implementierungen bereitstellen können. Wenn jedoch eine virtuelle Funktion ohne Definition deklariert wird, zeigt der Compiler an, dass die Implementierung an anderer Stelle bereitgestellt wird. Dies bedeutet, dass der Linker während der Verknüpfungsphase versucht, die fehlende Definition zu finden und dabei auf andere Kompilierungseinheiten oder Bibliotheken verweist.
Um diesen Fehler zu beheben, muss die virtuelle Funktion von einer Definition begleitet werden. Dadurch wird die Funktionsdeklaration mit ihrer Implementierung verknüpft, wodurch verhindert wird, dass der Linker später versucht, die Referenz aufzulösen. Eine definierte virtuelle Funktion sieht wie folgt aus:
virtual void fn() { /* insert code here */ }
Im Gegensatz dazu sieht eine virtuelle Funktionsdeklaration ohne Definition wie folgt aus:
virtual void fn();
Diese Deklaration stellt die Definition nicht bereit, was zu „undefiniert“ führt Verweis auf den Fehler „typeinfo“.
Analog ist es vergleichbar mit der Deklaration einer externen Variablen ohne Definition it:
extern int i; int *pi = &i;
In diesem Fall gibt der Compiler an, dass die Ganzzahl „i“ an anderer Stelle deklariert ist und während der Verknüpfung aufgelöst werden muss. Andernfalls kann pi nicht auf seine Adresse verweisen.
Das obige ist der detaillierte Inhalt vonWarum erzeugt mein C-Code Fehler „undefinierter Verweis auf Typeinfo'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!