问题描述
我正在将嵌入式程序从C#迁移到C ++,并且一直在努力寻找如何创建类数组的方法。该程序使用了非常标准的“四人帮”状态模式。每个状态都是一个从基类StateBase继承的类。所有状态类都驻留在一个数组中,我可以根据需要对其进行索引。我在VisualGDB错误列表中没有得到任何错误,但是当我编译程序时我得到了这个
对'StateBase :: StateBase()的未定义引用
我对C ++的了解不是很丰富,所以我很有可能从根本上做一些愚蠢的事情,并且会感谢您的帮助。
这是基类StateBase:
class StateBase
{
public:
StateBase();
virtual void doStateEntryActions();
virtual void doStateActions();
virtual StateNames checkEvents();
virtual void doStateExit(bool timeout);
};
这是从StateBase继承的状态类之一的示例
class Recovery : public StateBase
{
public:
Recovery()
{
cout << "Recovery constructor" << endl;
};
private:
void doStateEntryActions()
{
cout << "Recovery: doing state entry actions" << endl;
}
void doStateActions()
{
cout << "Recovery: doing state actions" << endl;
}
StateNames checkEvents()
{
cout << "Recovery: checking events" << endl;
return (recovery);
}
void doStateExit(bool timeout)
{
if (timeout)
cout << "Recovery: doing state exit with timeout" << endl;
else
cout << "Recovery: doing state exit no timeout" << endl;
}
};
这是我定义数组的方式
StateBase *stateArray[numStates];
stateArray[recovery] = new Recovery();
stateArray[findNeutral] = new FindNeutral();
stateArray[descend] = new Descend();
这是状态机的工作方式:
while (runMission)
{
if (doStateEntry)
{
stateArray[currentState]->doStateEntryActions();
doStateEntry = false;
}
stateArray[currentState]->doStateActions();
nextState = stateArray[currentState]->checkEvents();
if (nextState != currentState)
{
stateArray[currentState]->doStateExit(false);
currentState = nextState;
}
}
非常感谢您提供任何帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)