Jeg har en stor samling biblioteker som kompilerer riktig, men som ikke vinner lenken. Jeg bruker Visual Micro for Visual Studio 2015. Her er den komplette samlingen av feilmeldinger:
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)
Jeg har vært igjennom koden med en fintannet kam, men kan ikke se hvilke referanser som er udefinert.
Er det noe Windows 10-verktøy som kan undersøke vTables og hjelpe meg med å finne det som mangler?
Kodebasen er for stor til å postes, men jeg kan gi en ZIP-fil med all koden i den for alle som er villige til å hjelpe.
Kommentarer
- Linkeren prøver hardt å hjelpe deg. Sjekk DualMotorRomeo.h og at det er en destruktor (kan være nødvendig å være virtuell avhengig av arven?).
Svar
Jeg har ikke headerfilen til DualMotorRomeo
, men linkeren sier at en destruktør er erklært (~DualMotorRomeo()
) i klasseoverskriften, men ingen destruktorer er definert. Hvis du ikke skrev DualMotorRomeo
, må biblioteket oppdateres.
Inntil da, ganske enkelt legg til følgende i en av kildefilene dine:
DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo()
Det vil også fikse vtable
linkerfeil – vtable
vil bli inkludert i den kompilerte filen med dette deklarert.