C++エラー: undefined reference to `vtable for ...'
C++でリンクをした際にでたエラーについて
class Hoge
を作成した際にでてきたエラー
// hoge.h class Hoge{ ... public: Hoge() {}; ... virtual void func(); ... virtual ~Hoge(){}; };
のようなクラス定義をした。hoge.cpp
もこれに合うように作成した。
いくつか他のクラスも作成して、ここのコンパイルは通り中間ファイルができた。
最後にリンクしようとすると以下のエラーが。
... In function `Hoge::~Hoge()' ... undefined reference to `vtable for Hoge'
vtableなんたらは仮想関数が宣言されているが、定義されていないよ、ということらしい。 このエラーを見たら、デコンストラクタに問題があるように見え、 初めはデコンストラクタ内にいろいろ書いていたのでそれを試行錯誤すること気づけば数時間。
これが実はトラップで別の関数が原因のこともある。
結局何も変わらず丁寧にファイルを確認したら、func()関数の定義を忘れていた。
hoge.cpp
内でちゃんと定義したら無事リンクできるようになった。
補足
実際はHoge
クラス以外のクラスで、In function `Hoge::~Hoge()'
のようなエラーがでてきていたので、
ここに到達するのにも時間がかかった。