“Meghatározatlan hivatkozás a vtable-re a (z) {classname}

könyvtárak nagy gyűjteményével rendelkezem, amelyek helyesen fordítanak, de nem kapnak linket. Visual Micro-t használok a Visual Studio 2015-hez. Itt található a hibaüzenetek teljes gyűjteménye:

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) 

Finom fogazású fésűvel átéltem a kódot, de nem látja, hogy milyen hivatkozások nincsenek meghatározva.

Van olyan Windows 10 segédprogram, amely megvizsgálhatja a vTable-eket, és segíthet megtalálni, mi hiányzik?

A kódbázis túl nagy a közzétételhez, de egy ZIP-fájlt a benne lévő összes kóddal el tudok adni bárkinek, aki segíteni szeretne.

Megjegyzések

  • A linkelő keményen próbál segíteni. Ellenőrizze a DualMotorRomeo.h fájlt, hogy van-e romboló (az örökségtől függően esetleg virtuálisnak kell lennie?).

Válasz

A DualMotorRomeo fejlécfájlja nincs, de a linker azt mondja, hogy egy destruktort jelentettek be (~DualMotorRomeo() ) az osztály fejlécében, de nincs megadva destruktor. Ha nem “t írt DualMotorRomeo, akkor a könyvtárat frissíteni kell.

Addig egyszerűen adja hozzá a következőket az egyik forrásfájljához:

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

Ez szintén kijavítja a vtable linkelő hibákat – a vtable a lefordított fájlba kerül, ezzel deklarálva.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük