Ottenere “Riferimento indefinito a vtable per {classname}

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *