Få «Udefinert referanse til vtabell for {classname}

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *