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“
Auflösen des Fehlers
Die Hauptursache dieses Fehlers 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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3