„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum erhalte ich in meinem C++-Code undefinierte Symbolfehler „vtable“ und „typeinfo“?

Warum erhalte ich in meinem C++-Code undefinierte Symbolfehler „vtable“ und „typeinfo“?

Veröffentlicht am 08.11.2024
Durchsuche:142

Why Am I Getting \

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“

  • vtable (Virtual Method Table): A-Daten Struktur, die von Compilern zum Speichern von Zeigern auf die virtuellen Methoden einer Klasse verwendet wird. Es ermöglicht Objekten abgeleiteter Klassen, die korrekten Implementierungen virtueller Methoden aufzurufen.
  • typeinfo (Laufzeittypinformationen): Im Speicher des Objekts gespeicherte Informationen, die den Typ des Objekts identifizieren. Es ermöglicht dynamische Typprüfung und polymorphes Verhalten.

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.

Neuestes Tutorial Mehr>

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