Ich habe eine große Sammlung von Bibliotheken, die korrekt kompiliert werden, aber keine Verknüpfung herstellen. Ich verwende Visual Micro für Visual Studio 2015. Hier ist die vollständige Sammlung von Fehlermeldungen:
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)
Ich habe den Code mit einem feinen Kamm durchlaufen. kann aber nicht sehen, welche Referenzen undefiniert sind.
Gibt es ein Windows 10-Dienstprogramm, das die vTables untersuchen und mir helfen kann, herauszufinden, was fehlt?
Die Codebasis ist zu groß zum Posten, aber ich kann jedem, der helfen möchte, eine ZIP-Datei mit dem gesamten Code zur Verfügung stellen.
Kommentare
- Der Linker ist bemüht, Ihnen zu helfen. Überprüfen Sie DualMotorRomeo.h und ob es einen Destruktor gibt (muss möglicherweise abhängig von der Vererbung virtuell sein?).
Antwort
Ich habe keine Header-Datei für DualMotorRomeo
, aber der Linker sagt, dass ein Destruktor deklariert wurde (~DualMotorRomeo()
) im Klassenheader, aber es wurde kein Destruktor definiert. Wenn Sie DualMotorRomeo
nicht geschrieben haben, muss die Bibliothek aktualisiert werden.
Bis dahin einfach Fügen Sie einer Ihrer Quelldateien Folgendes hinzu:
DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo()
Dadurch werden auch die vtable
-Linkerfehler behoben – die vtable
wird in die kompilierte Datei aufgenommen, in der dies deklariert ist.