当我在我的派生类中的constructor
中发表评论时,我得到'错误LNK2001:未解析的外部符号' 。
我的基类定义了一个虚拟OnEnter
和OnExit
,我的派生类实现了这些函数,一切都很好。然后当我向我的派生类添加一个构造函数时,它不会编译。
1>State.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall State::OnEnter(void)" (?OnEnter@State@@UAEXXZ)
1>State.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall State::OnExit(void)" (?OnExit@State@@UAEXXZ)
国家是我的基础。
//State.h
#ifndef STATE_H
#define STATE_H
class State
{
public:
virtual void OnEnter();
virtual void OnExit();
};
#endif
//State.cpp
#include "State.h"
//DateEntryView.h
#ifndef DATE_ENTRY_VIEW_H
#define DATE_ENTRY_VIEW_H
#include "State.h"
class DateEntryView
: public State
{
public:
DateEntryView();
public:
void OnEnter();
void OnExit();
};
#endif
//DateEntryView.cpp
#include "DateEntryView.h"
DateEntryView::DateEntryView()
{
}
void DateEntryView::OnEnter()
{
}
void DateEntryView::OnExit()
{
}
答案 0 :(得分:0)
您必须在州级别中将OnEnter和OnExit方法设为纯虚拟。
像这样class State
{
public:
virtual void OnEnter() = 0;
virtual void OnLeave() = 0;
};
class StateOne : public virtual State
{
public:
StateOne()
{
}
virtual void OnEnter()
{
}
virtual void OnLeave()
{
}
};
int main()
{
State *state = new StateOne;
state->OnEnter();
state->OnLeave();
delete state;
return 0;
}
或者如果您不想要它们纯虚拟添加大括号
class State
{
public:
virtual void OnEnter()
{
}
virtual void OnLeave()
{
}
};
答案 1 :(得分:0)
您尚未在提供的源中提供OnEnter或OnExit的实现。
如果他们应该有实现,那么你可能有一个state.c文件,当你编译时,会生成一个state.o文件。生成可执行文件时,需要在链接阶段包含此文件。
如果它们不应该有实现,例如。如果它是一个抽象基类,那么你需要像这样声明它们:
virtual void OnEnter() = 0;
virtual void OnExit() = 0;