Undefinierte Symbole: „vtable“ und „typeinfo“
Im bereitgestellten Code tritt ein Verknüpfungsfehler mit den folgenden Meldungen auf:
Undefined symbols: "vtable for Obstacle", referenced from: Obstacle::Obstacle()in Myworld.o "typeinfo for Obstacle", referenced from: typeinfo for RECTANGLEin RECTANGLE.o typeinfo for CIRCLEin CIRCLE.o
Verstehen von „vtable“ und „typeinfo“
Beheben des Fehlers
Die Hauptursache für diesen Fehler ist höchstwahrscheinlich, dass die abstrakte Basisklasse Obstacle non enthält -reine virtuelle Funktionen. Wenn eine Klasse eine rein virtuelle Funktion deklariert (virtual void Method() = 0;), bedeutet dies, dass die abgeleiteten Klassen die Implementierung überschreiben müssen.
Wenn Sie in Obstacle, dem Compiler, nicht rein virtuelle Funktionen definiert haben erwartet, ihre Implementierungen entweder in der Basisklasse oder in den abgeleiteten Klassen zu finden. Wenn diese Implementierungen jedoch nicht bereitgestellt werden, generiert der Compiler interne Strukturen (vtable und typeinfo), die auf diesen Funktionen basieren. Bei der Verknüpfung führen die fehlenden Funktionen zu den undefinierten Symbolfehlern.
Lösung
Um dieses Problem zu beheben, stellen Sie sicher, dass alle virtuellen Methoden in der abstrakten Basisklasse Obstacle deklariert sind als rein virtuelle Funktionen. Dadurch werden die abgeleiteten Klassen gezwungen, diese Methoden zu überschreiben und zu implementieren. Dadurch werden die richtigen virtuellen Methodenimplementierungen bereitgestellt und der Verknüpfungsprozess sollte ohne die undefinierten Symbolfehler erfolgreich sein.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meinem C-Code undefinierte Symbolfehler „vtable' und „typeinfo'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!