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.