Obteniendo «Referencia indefinida a vtable para {classname}

Tengo una gran colección de bibliotecas que se compilan correctamente pero no» enlazan. Estoy usando Visual Micro para Visual Studio 2015. Aquí está la colección completa de mensajes de error:

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) 

He revisado el código con un peine de dientes finos, pero no puede ver qué referencias no están definidas.

¿Existe alguna utilidad de Windows 10 que pueda examinar las vTables y ayudarme a encontrar lo que falta?

La base del código es demasiado grande para publicar, pero puedo proporcionar un archivo ZIP con todo el código para cualquiera que esté dispuesto a ayudar.

Comentarios

  • El vinculador está tratando de ayudarlo. Verifique DualMotorRomeo.h y que haya un destructor (¿podría necesitar ser virtual dependiendo de la herencia?).

Respuesta

No tengo el archivo de encabezado para DualMotorRomeo, pero el vinculador dice que se ha declarado un destructor (~DualMotorRomeo() ) en el encabezado de la clase, pero no se ha definido ningún destructor. Si no escribiste DualMotorRomeo, entonces la biblioteca debe actualizarse.

Hasta entonces, simplemente agregue lo siguiente a uno de sus archivos fuente:

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

Eso también solucionará los vtable errores del vinculador – el vtable se incluirá en el archivo compilado con esto declarado en él.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *