C ++ programımı oluştururken hata mesajı alıyorum
'vtable' undefined referansı ...
Bu sorunun nedeni nedir? Nasıl düzeltebilirim?
Bu şu kod (söz konusu sınıf CGameModule olduğunu.) İçin hata alıyorum olur ve benim yaşam için sorunun ne olduğunu anlayamıyorum. İlk başta, sanal bir işleve bir beden vermeyi unutmakla ilgili olduğunu düşündüm, ama anladığım kadarıyla, her şey burada. Kalıtım zinciri biraz uzun, ama burada ilgili kaynak kodu. Başka hangi bilgileri vermem gerektiğinden emin değilim.
Not: Yapıcı bu hatanın gerçekleştiği yerdir, öyle görünmektedir.
Kodum:
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;
};
Devralınan ...
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;
};
Hangi miras ....
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
qmake -project
ve sonra qmake
) proje dosyalarınızı yeniden oluşturmadıysanız Makefile
, bu, Qt kullanılırken hatanın olası bir kaynağıdır.
Q_OBJECT
harici olarak kopyalanır, ancak henüz .pro dosyasının bir parçası değilse, o zaman iyi derlenmiş olsa da, bağlantı vermemesidir. Bunu yapabilmek için bu .h/.cpp
dosyayı .pro dosyasına eklemeliyiz qmake
.