vtableへの未定義の参照 質問する

vtableへの未定義の参照 質問する

C++プログラムをビルドするときにエラーメッセージが表示されます

'vtable...' への未定義の参照

この問題の原因は何ですか? どうすれば解決できますか?


たまたま次のコードでエラーが発生しています (問題のクラスは CGameModule です)。何が問題なのかまったく理解できません。最初は、仮想関数に本体を指定し忘れたことが原因だと思いましたが、私が理解している限り、すべてここにあります。継承チェーンは少し長いですが、関連するソース コードは次のとおりです。他にどのような情報を提供すればよいかわかりません。

注: このエラーはコンストラクターで発生しているようです。

私のコード:

cゲームモジュール.h

class CGameModule : public Dasher::CDasherComponent {
 public:
  CGameModule() : CDasherModule() {};
  virtual ~CGameModule();

  virtual void HandleEvent(Dasher::CEvent *pEvent);
};

ゲームモジュール.cpp

#include "cgamemodule.h"

void CGameModule::HandleEvent(Dasher::CEvent *pEvent) {}

....から継承されます。

namespace Dasher {
  class CEvent;
  class CDasherComponent;
};

class Dasher::CDasherComponent {
 public:
  CDasherComponent() {};
  virtual ~CDasherComponent() {};

  virtual void HandleEvent(Dasher::CEvent * pEvent) {};
};

ベストアンサー1

GCC よくある質問そこには次のエントリがあります:

解決策は、純粋ではないすべての仮想メソッドが定義されていることを確認することです。純粋仮想として宣言されている場合でも、デストラクタを定義する必要があることに注意してください [class.dtor]/7。

したがって、仮想デストラクタの定義を提供する必要があります。

virtual ~CDasherModule()
{ }

おすすめ記事