At få “Udefineret henvisning til vtabel for {classname}

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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *