“Undefined reference to vtable for {classname}

krijgen. Ik heb een grote verzameling bibliotheken die correct compileren maar die niet linken. Ik gebruik Visual Micro voor Visual Studio 2015. Hier is de volledige verzameling foutmeldingen:

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) 

Ik heb de code doorgenomen met een fijne kam, maar kan niet zien welke referenties niet gedefinieerd zijn.

Is er een Windows 10-hulpprogramma dat de vTables kan onderzoeken en me kan helpen te vinden wat er ontbreekt?

De codebasis is te groot om te posten, maar ik kan een ZIP-bestand met alle code erin leveren voor iedereen die wil helpen.

Opmerkingen

  • De linker doet zijn best om u te helpen. Controleer DualMotorRomeo.h en of er een destructor is (moet mogelijk virtueel zijn afhankelijk van de overerving?).

Answer

Ik heb het header-bestand voor DualMotorRomeo niet, maar de linker zegt dat er een destructor is gedeclareerd (~DualMotorRomeo() ) in de koptekst van de klasse, maar er is geen destructor gedefinieerd. Als je “niet DualMotorRomeo hebt geschreven, moet de bibliotheek worden bijgewerkt.

Tot die tijd gewoon voeg het volgende toe aan een van uw bronbestanden:

DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo() 

Dat lost ook de vtable linkerfouten op – de vtable zal worden opgenomen in het gecompileerde bestand met dit daarin gedeclareerd.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *