Undefined reference to vtable

Lors de la construction de mon programme en C++, j'obtiens le message d'erreur

undefined reference to 'vtable...

Quelle est la cause de ce problème? Comment puis-je résoudre ce problème?


Il se trouve que j'obtiens le message d'erreur pour le code suivant (La classe en question est CGameModule.) et je ne peux pas pour la vie de me comprendre quel est le problème. Au début, je pensais que c'était lié à l'oubli de donner une fonction virtuelle d'un corps, mais comme je le comprends, tout est ici. L'héritage de la chaîne est un peu long, mais ici, c'est le code source. Je ne suis pas sûr de ce que d'autres informations que je devrais fournir.

Remarque: Le constructeur est où cette erreur se produit, il avait l'air.

Mon code:

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;
};

Hérite de...

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;
};

Qui hérite de l'....

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
  • Dont la fonction est de lancer le "undefined reference to vtable..." ?
  • J'ai totalement raté que le message d'erreur indique une fonction. Il arrive à être le constructeur, donc j'ai vu mon nom de la classe et de ne pas faire le lien. Ainsi, le constructeur est en train de jeter ce. Je vais ajouter que le détail de mon post original.
InformationsquelleAutor RyanG | 2010-06-17