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.