如何创建均从同一基类继承的类的数组

问题描述

我正在将嵌入式程序从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 (将#修改为@)