При сборке моей программы C++ я получаю сообщение об ошибке
неопределенная ссылка на 'vtable...
В чем причина этой проблемы? Как мне это исправить?
Так получилось, что я получаю сообщение об ошибке для следующего кода (рассматриваемый класс - CGameModule.), И я не могу на всю жизнь понять, в чем проблема. Сначала я думал, что это связано с забвением придания виртуальной функции тела, но, насколько я понимаю, все здесь. Цепочка наследования немного длинна, но вот соответствующий исходный код. Я не уверен, какую другую информацию я должен предоставить.
Примечание: конструктор, где эта ошибка происходит, казалось бы.
Мой код:
class CGameModule : public CDasherModule {
 public:
  CGameModule(Dasher::CEventHandler *pEventHandler, CSettingsStore *pSettingsStore, CDasherInterfaceBase *pInterface, ModuleID_t iID, const char *szName)
  : CDasherModule(pEventHandler, pSettingsStore, iID, 0, szName)
  { 
      g_pLogger->Log("Inside game module constructor");   
      m_pInterface = pInterface; 
  }
  virtual ~CGameModule() {};
  std::string GetTypedTarget();
  std::string GetUntypedTarget();
  bool DecorateView(CDasherView *pView) {
      //g_pLogger->Log("Decorating the view");
      return false;
  }
  void SetDasherModel(CDasherModel *pModel) { m_pModel = pModel; }
  virtual void HandleEvent(Dasher::CEvent *pEvent); 
 private:
  CDasherNode *pLastTypedNode;
  CDasherNode *pNextTargetNode;
  std::string m_sTargetString;
  size_t m_stCurrentStringPos;
  CDasherModel *m_pModel;
  CDasherInterfaceBase *m_pInterface;
};
Наследует от...
class CDasherModule;
typedef std::vector<CDasherModule*>::size_type ModuleID_t;
/// \ingroup Core
/// @{
class CDasherModule : public Dasher::CDasherComponent {
 public:
  CDasherModule(Dasher::CEventHandler * pEventHandler, CSettingsStore * pSettingsStore, ModuleID_t iID, int iType, const char *szName);
  virtual ModuleID_t GetID();
  virtual void SetID(ModuleID_t);
  virtual int GetType();
  virtual const char *GetName();
  virtual bool GetSettings(SModuleSettings **pSettings, int *iCount) {
    return false;
  };
 private:
  ModuleID_t m_iID;
  int m_iType;
  const char *m_szName;
};
Который наследует от....
namespace Dasher {
  class CEvent;
  class CEventHandler;
  class CDasherComponent;
};
/// \ingroup Core
/// @{
class Dasher::CDasherComponent {
 public:
  CDasherComponent(Dasher::CEventHandler* pEventHandler, CSettingsStore* pSettingsStore);
  virtual ~CDasherComponent();
  void InsertEvent(Dasher::CEvent * pEvent);
  virtual void HandleEvent(Dasher::CEvent * pEvent) {};
  bool GetBoolParameter(int iParameter) const;
  void SetBoolParameter(int iParameter, bool bValue) const;
  long GetLongParameter(int iParameter) const;
  void SetLongParameter(int iParameter, long lValue) const;
  std::string GetStringParameter(int iParameter) const;
  void        SetStringParameter(int iParameter, const std::string & sValue) const;
  ParameterType   GetParameterType(int iParameter) const;
  std::string     GetParameterName(int iParameter) const;
 protected:
  Dasher::CEventHandler *m_pEventHandler;
  CSettingsStore *m_pSettingsStore;
};
/// @}
#endif
