Získání „Nedefinovaného odkazu na vtable pro {classname}

Mám velkou sbírku knihoven, které se správně kompilují, ale nebudou odkazovat. Používám Visual Micro pro Visual Studio 2015. Zde je kompletní kolekce chybových zpráv:

CommandPattern3.cpp.o:In function `DualMotorRomeo DualMotorRomeo.h:undefined reference to `vtable for DualMotorRomeo DualMotorRomeo.h:undefined reference to `vtable for DualMotorRomeo CommandPattern3.cpp.o:In function `__static_initialization_and_destruction_0 CommandPattern3.ino:undefined reference to `DualMotorRomeo ~DualMotorRomeo() collect2.exe*:error: ld returned 1 exit status Error compiling for board Arduino/Genuino Mega w/ ATmega2560 (Mega 2560) 

Byl jsem přes kód s jemným ozubeným hřebenem, ale nevidí, jaké odkazy jsou nedefinované.

Existuje nějaký nástroj Windows 10, který dokáže prozkoumat vTables a pomoci mi najít, co chybí?

Kódová základna je příliš velká na to, abych ji mohl zveřejnit, ale mohu poskytnout soubor ZIP se všemi kódy v něm pro kohokoli ochotného pomoci.

Komentáře

  • Linker se vám snaží pomoci. Zkontrolujte DualMotorRomeo.h a zda existuje destruktor (může být nutné být virtuální v závislosti na dědičnosti?).

Odpovědět

Nemám soubor záhlaví pro DualMotorRomeo, ale linker říká, že byl deklarován destruktor (~DualMotorRomeo() ) v záhlaví třídy, ale nebyl definován žádný destruktor. Pokud jste nenapsali DualMotorRomeo, je třeba knihovnu aktualizovat.

Do té doby jednoduše přidejte do jednoho ze svých zdrojových souborů následující:

DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo() 

Tím se také opraví chyby linkeru vtablevtable bude zahrnut do kompilovaného souboru s tímto v něm deklarovaným.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *