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
qmake -project
다음과 qmake
새를 생성하는) Makefile
, Qt는을 사용하여 오류의 큰 원인입니다.
Q_OBJECT
이 외부로 복사되었지만 .pro 파일의 일부가 아닌 경우 컴파일이 잘되지만 링크되지 않는다는 것입니다. 이 .h/.cpp
파일을 .pro 파일 에 추가해야 합니다 qmake
.