Mam dużą kolekcję bibliotek, które kompilują się poprawnie, ale nie udało mi się połączyć. Używam programu Visual Micro for Visual Studio 2015. Oto pełna kolekcja komunikatów o błędach:
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)
Przeszedłem przez kod za pomocą dobrego grzebienia zębatego, ale nie widzę, które odniesienia są niezdefiniowane.
Czy jest jakieś narzędzie Windows 10, które może sprawdzić tabele vTables i pomóc mi znaleźć brakujące?
Baza kodu jest zbyt duża, aby można było ją opublikować, ale mogę zapewnić plik ZIP zawierający cały kod dla każdego, kto chce pomóc.
Komentarze
- Linker bardzo się stara ci pomóc. Sprawdź DualMotorRomeo.h i czy istnieje destruktor (w zależności od dziedziczenia może być potrzebny wirtualny?).
Odpowiedz
Nie mam pliku nagłówkowego dla DualMotorRomeo
, ale konsolidator mówi, że został zadeklarowany destruktor (~DualMotorRomeo()
) w nagłówku klasy, ale nie zdefiniowano żadnego destruktora. Jeśli nie napisałeś DualMotorRomeo
, to biblioteka musi zostać zaktualizowana.
Do tego czasu po prostu dodaj następujący fragment do jednego z plików źródłowych:
DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo()
To również naprawi błędy konsolidatora vtable
– vtable
zostanie dołączony do skompilowanego pliku z tym zadeklarowanym.