如何创建从同一基类继承的类数组 P>我将一个嵌入式程序从C++中移到C++,一直在苦苦思索如何创建一个类数组。该程序使用了相当标准的“四人帮”状态模式。每个状态都是从基类StateBase继承的类。所有状态类都驻留在一个数组中,我可以根据需要对该数组进行索引。我在VisualGDB错误列表中没有得到任何错误,但是当我编译程序时,我得到了这个错误
对“StateBase::StateBase()”的未定义引用 我在C++方面经验不太丰富,所以我有一个很好的机会,我做的事情基本上是愚蠢的,并且会感激任何帮助。 下面是StateBase的基类:如何创建从同一基类继承的类数组 P>我将一个嵌入式程序从C++中移到C++,一直在苦苦思索如何创建一个类数组。该程序使用了相当标准的“四人帮”状态模式。每个状态都是从基类StateBase继承的类。所有状态类都驻留在一个数组中,我可以根据需要对该数组进行索引。我在VisualGDB错误列表中没有得到任何错误,但是当我编译程序时,我得到了这个错误,c++,state-machine,C++,State Machine,对“StateBase::StateBase()”的未定义引用 我在C++方面经验不太丰富,所以我有一个很好的机会,我做的事情基本上是愚蠢的,并且会感激任何帮助。 下面是StateBase的基类: class StateBase { public: StateBase(); virtual void doStateEntryActions(); virtual void doStateActions(); virtual StateNames checkEvent
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;
}
};
以下是状态机的工作原理:
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;
}
}
非常感谢advance提供的帮助。您忘了在任何地方定义构造函数。Sam-这很有帮助,但我还没有把它们全部放在一起。现在我像这样在线定义StateBase构造函数:StateBase(){};派生类构造函数也是这样的恢复():StateBase(){如果有C++相关的东西你不懂,一个好的C++教科书是你最好的资源。不幸的是,StAccOfFultUncom不是C++教科书的替代品。我有2的Stroustrup的C++书籍,但我仍然缺少一些东西。我确实花了相当多的时间尝试自己去弄明白这些东西。错误是指最后一个问题。错误不是所有的虚拟方法都被定义,同样的问题。所有的类方法必须在某个地方被定义。这是C++工作的唯一方式。你忘记了在任何地方定义构造函数。山姆-这有帮助,但是我还没有把它全部放在一起。现在我在定义状态库const。类似这样的内联构造函数:StateBase(){};派生类构造函数也类似于Recovery():StateBase()这样的内联构造函数{如果有C++相关的东西你不懂,一个好的C++教科书是你最好的资源。不幸的是,StAccOfFultUncom不是C++教科书的替代品。我有2的Stroustrup的C++书籍,但我仍然缺少一些东西。我确实花了相当多的时间尝试自己去弄明白这些东西。错误是指最后一个问题。错误意味着并非所有的虚拟方法都被定义为同一个问题。所有类方法必须在某个地方被定义。这是C++工作的唯一方式。
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;
}
}