Jeg har en stor samling af biblioteker, der kompilerer korrekt, men ikke får linket. Jeg bruger Visual Micro til Visual Studio 2015. Her er den komplette samling af fejlmeddelelser:
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æret igennem koden med en fintandet kam, men kan ikke se, hvilke referencer der er udefineret.
Er der noget Windows 10-værktøj, der kan undersøge vTables og hjælpe mig med at finde det, der mangler?
Kodebasen er for stor til at kunne postes, men jeg kan give en ZIP-fil med al koden i den til alle, der er villige til at hjælpe.
Kommentarer
- Linkeren prøver hårdt på at hjælpe dig. Kontroller DualMotorRomeo.h, og at der er en destruktor (muligvis skal det være virtuelt afhængigt af arven?).
Svar
Jeg har ikke headerfilen til DualMotorRomeo
, men linkeren siger, at en destruktor er blevet erklæret (~DualMotorRomeo()
) i klasseoverskriften, men der er ikke defineret nogen destruktør. Hvis du ikke skrev DualMotorRomeo
, skal biblioteket opdateres.
Indtil da skal du blot tilføj følgende til en af dine kildefiler:
DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo()
Det løser også vtable
linkerfejl – vtable
vil blive inkluderet i den kompilerede fil med dette erklæret i.