Obtenir « Référence non définie à vtable pour {classname}

Jai une grande collection de bibliothèques qui se compilent correctement mais qui nont pas de lien. Jutilise Visual Micro pour Visual Studio 2015. Voici la collection complète de messages derreur:

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) 

Jai parcouru le code avec un peigne fin, mais ne peut pas voir quelles références ne sont pas définies.

Existe-t-il un utilitaire Windows 10 qui peut examiner les vTables et maider à trouver ce qui manque?

La base de code est trop volumineuse pour être publiée, mais je peux fournir un fichier ZIP contenant tout le code à quiconque veut aider.

Commentaires

  • Léditeur de liens sefforce de vous aider. Vérifiez DualMotorRomeo.h et quil existe un destructeur (peut-être besoin dêtre virtuel en fonction de lhéritage?).

Réponse

Je nai pas le fichier den-tête pour DualMotorRomeo, mais léditeur de liens dit quun destructeur a été déclaré (~DualMotorRomeo() ) dans len-tête de la classe, mais aucun destructeur na été défini. Si vous navez pas écrit DualMotorRomeo alors la bibliothèque doit être mise à jour.

Jusque-là, simplement ajoutez ce qui suit à lun de vos fichiers source:

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

Cela corrigera également les erreurs de léditeur de liens vtable – le vtable sera inclus dans le fichier compilé avec ceci déclaré.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *