Få ”Odefinierad referens till vtabell för {classname}

Jag har en stor samling bibliotek som kompilerar korrekt men inte får länken. Jag använder Visual Micro för Visual Studio 2015. Här är den kompletta samlingen av felmeddelanden:

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) 

Jag har gått igenom koden med en fintandad kam, men kan inte se vilka referenser som är odefinierade.

Finns det något Windows 10-verktyg som kan undersöka vTables och hjälpa mig hitta vad som saknas?

Kodbasen är för stor för att publiceras, men jag kan tillhandahålla en ZIP-fil med all koden i den för alla som vill hjälpa till.

Kommentarer

  • Länkaren försöker hårt att hjälpa dig. Kontrollera DualMotorRomeo.h och att det finns en destruktor (kan behöva vara virtuell beroende på arvet?).

Svar

Jag har inte rubrikfilen för DualMotorRomeo, men länkaren säger att en destruktör har förklarats (~DualMotorRomeo() ) i klassrubriken, men ingen destruktör har definierats. Om du inte skrev DualMotorRomeo måste biblioteket uppdateras.

Fram till dess, helt enkelt lägg till följande i en av dina källfiler:

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

Det kommer också att fixa vtable länkfel – vtable kommer att inkluderas i den kompilerade filen med detta deklarerat.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *