Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erhalte ich in meinem C-Programm die Fehlermeldung „Undefinierte Symbole: „vtable“ und „typeinfo“?

Warum erhalte ich in meinem C-Programm die Fehlermeldung „Undefinierte Symbole: „vtable“ und „typeinfo“?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 16:02:56345Durchsuche

Why Am I Getting

Undefinierte Symbole: „vtable“ und „typeinfo“

Frage:

Beim Kompilieren Bei einem C-Programm treten folgende Fehler auf:

Undefined symbols:
  "vtable for Obstacle"
  "typeinfo for Obstacle"

Was bedeuten diese Symbole und wie können sie behoben werden?

Antwort:

In C ist eine virtuelle Methode eine Methode, die in einer Basisklasse deklariert und in abgeleiteten Klassen überschrieben wird. Um eine dynamische Bindung an die richtige Methode zur Laufzeit zu ermöglichen, generiert der Compiler eine virtuelle Methodentabelle (vtable) und Typinformationen (typeinfo) für jede Klasse, die virtuelle Methoden enthält.

Die Fehler weisen darauf hin, dass der Compiler dazu nicht in der Lage ist Finden Sie die vtable und typeinfo für die Obstacle-Klasse. Dies kann auftreten, wenn:

  • Die Obstacle-Klasse nicht ordnungsgemäß als abstrakt deklariert ist oder
  • Die Obstacle-Klasse enthält nicht rein virtuelle Methoden, die nicht in einer abgeleiteten Klasse implementiert sind.

Um diese Fehler zu beheben, stellen Sie sicher, dass alle virtuellen Methoden in der Obstacle-Klasse als rein virtuell deklariert werden, indem Sie die folgende Syntax verwenden:

<code class="cpp">virtual void Method() = 0;</code>

Dies zeigt an, dass die Methode überschrieben werden muss in einer abgeleiteten Klasse und dass sie möglicherweise keine eigene Implementierung in der Basisklasse hat.

Wenn die Obstacle-Klasse nicht rein virtuelle Methoden enthält, stellen Sie sicher, dass diese in einer abgeleiteten Klasse implementiert sind. Andernfalls geht der Compiler davon aus, dass er irgendwo eine Implementierung hat, und generiert die vtable und typeinfo in einer Objektdatei, die nicht die eigentliche Implementierung enthält.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meinem C-Programm die Fehlermeldung „Undefinierte Symbole: „vtable“ und „typeinfo“?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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