Minulla on suuri kokoelma kirjastoja, jotka kääntyvät oikein, mutta eivät linkkejä. Käytän Visual Micro for Visual Studio 2015: tä. Tässä on kokoelma virheilmoituksia:
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)
Olen käynyt läpi koodin hienohampaisella kammalla, mutta ei näe mitä viitteitä ei ole määritelty.
Onko Windows 10 -apuohjelmaa, joka voi tutkia vTable-taulukoita ja auttaa minua löytämään puuttuvan?
Koodipohja on liian suuri postittamista varten, mutta voin antaa ZIP-tiedoston, jossa on kaikki sen koodi, kaikille, jotka haluavat auttaa.
Kommentit
- Linkittäjä yrittää kovasti auttaa sinua. Tarkista DualMotorRomeo.h ja että siinä on tuhoaja (sen on ehkä oltava virtuaalinen perinnöstä riippuen?).
Vastaa
Minulla ei ole otsikon DualMotorRomeo
otsikkotiedostoa, mutta linkittäjä sanoo, että tuhoaja on ilmoitettu (~DualMotorRomeo()
) luokan otsikossa, mutta hävittäjää ei ole määritelty. Jos et kirjoittanut DualMotorRomeo
, kirjasto on päivitettävä.
Siihen asti yksinkertaisesti lisää seuraava johonkin lähdetiedostoihisi:
DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo()
Tämä korjaa myös vtable
-linkkivirheet – vtable
sisällytetään käännettyyn tiedostoon samalla kun se on ilmoitettu.