Heim > Backend-Entwicklung > C++ > Warum erhalte ich in meinem C-Code undefinierte Symbolfehler „vtable' und „typeinfo'?

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

Susan Sarandon
Freigeben: 2024-11-03 15:30:30
Original
430 Leute haben es durchsucht

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
Nach dem Login kopieren

Verstehen von „vtable“ und „typeinfo“

  • vtable (Virtual Method Table): Eine Datenstruktur, die von Compilern verwendet wird Speichern Sie Zeiger auf die virtuellen Methoden einer Klasse. 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.

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage