如何创建从同一基类继承的类数组 P>我将一个嵌入式程序从C++中移到C++,一直在苦苦思索如何创建一个类数组。该程序使用了相当标准的“四人帮”状态模式。每个状态都是从基类StateBase继承的类。所有状态类都驻留在一个数组中,我可以根据需要对该数组进行索引。我在VisualGDB错误列表中没有得到任何错误,但是当我编译程序时,我得到了这个错误

如何创建从同一基类继承的类数组 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

对“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;
    }
};
以下是状态机的工作原理:

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;
    }
}