のvtableへの未定義の参照」を取得する正しくコンパイルされてもリンクされないライブラリの大規模なコレクションがあります。 Visual Studio2015用のVisualMicroを使用しています。エラーメッセージの完全なコレクションは次のとおりです。
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)
細かい櫛でコードを実行しましたが、しかし、どの参照が未定義であるかを確認することはできません。
vTableを調べて不足しているものを見つけるのに役立つWindows10ユーティリティはありますか?
コードベースが大きすぎて投稿できませんが、すべてのコードを含むZIPファイルを提供できます。
コメント
- リンカーはあなたを助けるために一生懸命努力しています。 DualMotorRomeo.hを確認し、デストラクタがあることを確認します(継承によっては仮想である必要がありますか?)。
回答
DualMotorRomeo
のヘッダーファイルがありませんが、リンカーはデストラクタが宣言されていると言っています(~DualMotorRomeo()
)クラスヘッダーにありますが、デストラクタが定義されていません。「DualMotorRomeo
を記述しなかった場合は、ライブラリを更新する必要があります。
それまでは、単にソースファイルの1つに以下を追加します。
DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo()
これにより、vtable
リンカーエラーも修正されます。 vtable
は、これが宣言されたコンパイル済みファイルに含まれます。