Uzyskiwanie „Niezdefiniowanej referencji do tabeli vtable dla {classname}

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 vtablevtable zostanie dołączony do skompilowanego pliku z tym zadeklarowanym.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *