Ho una vasta collezione di librerie che si compilano correttamente ma non si collegano. Sto usando Visual Micro per Visual Studio 2015. Ecco la raccolta completa dei messaggi di errore:
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)
Ho letto il codice con un pettine a denti fini, ma non può vedere quali riferimenti sono indefiniti.
Esiste qualche utility di Windows 10 in grado di esaminare le vTables e aiutarmi a trovare ciò che manca?
La base del codice è troppo grande per essere pubblicata, ma posso fornire un file ZIP con tutto il codice contenuto per chiunque sia disposto ad aiutare.
Commenti
- Il linker sta cercando di aiutarti. Controlla DualMotorRomeo.he che sia presente un distruttore (potrebbe essere necessario che sia virtuale a seconda dellereditarietà?).
Risposta
Non ho il file di intestazione per DualMotorRomeo
, ma il linker dice che è stato dichiarato un distruttore (~DualMotorRomeo()
) nellintestazione della classe, ma non è stato definito alcun distruttore. Se “non hai scritto DualMotorRomeo
, la libreria deve essere aggiornata.
Fino ad allora, semplicemente aggiungi quanto segue a uno dei tuoi file di origine:
DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo()
Ciò risolverà anche gli vtable
errori del linker – il vtable
verrà incluso nel file compilato con questo dichiarato al suo interno.