Am o colecție mare de biblioteci care compilează corect, dar nu au câștigat” t link. Utilizez Visual Micro pentru Visual Studio 2015. Iată colecția completă de mesaje de eroare:
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)
Am trecut prin cod cu un pieptene fin dințat, dar nu pot vedea ce referințe sunt nedefinite.
Există un utilitar Windows 10 care poate examina tabelele vTable și mă poate ajuta să găsesc ce lipsește?
Baza de cod este prea mare pentru a fi postată, dar pot oferi un fișier ZIP cu tot codul pentru oricine dorește să vă ajute.
Comentarii
- Linkerul încearcă din răsputeri să vă ajute. Verificați DualMotorRomeo.h și dacă există un destructor (poate fi necesar să fie virtual în funcție de moștenire?).
Răspuns
Nu am fișierul antet pentru DualMotorRomeo
, dar linkerul spune că a fost declarat un destructor (~DualMotorRomeo()
) în antetul clasei, dar nu a fost definit niciun destructor. Dacă nu ați scris DualMotorRomeo
, atunci biblioteca trebuie actualizată.
Până atunci, pur și simplu adăugați următoarele la unul dintre fișierele dvs. sursă:
DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo()
Acest lucru va remedia, de asemenea, erorile vtable
linker – vtable
va fi inclus în fișierul compilat cu acest lucru declarat în acesta.