将模板化状态向量传递给构造函数的问题

时间:2010-02-03 08:51:53

标签: c++ stl

对于那些追随传奇的人,我仍然在尝试定义有限状态机,状态&事件采用“适当的”C ++方式,带有模板。

这段代码有什么问题?

template <typename StateTypeEnum, typename EventTypeEnum>
class Fsm
{
public:
    Fsm(E_subSystems subSystem,
        uint8_t instance,
        const char * const fsmName,
        const std::vector<State<StateTypeEnum, EventTypeEnum> >& states)
    {}

其中

template <typename StateTypeEnum, typename EventTypeEnum>
class State
{
public:
    State(INPUT E_subSystems subSystem,
    StateTypeEnum stateId, 
    const char * const stateName,
    const std::map<Event<EventTypeEnum>,  EventHandlerFunction>& events)
{}

错误消息

  

没有匹配函数调用“State&lt; E_callControlStates,E_callControEvents&gt; :: State()”fsm.h行98 C / C ++问题

看起来错误消息是指状态的non-existent默认构造函数,但为什么?

E_callControlStates, E_callControEvents是用于声明Fsm对象的模板参数(没有错误)。

显然,我忽略了一些事情。犯了一个st00pid n00b错误,但是什么?提前致谢


我的坏。当然它与我所看到的代码无关 - 但很少有,是吗?

Fsm类宣布

private:    State<StateTypeEnum, EventTypeEnum>  _currentState;

应该是什么时候

private:    State<StateTypeEnum, EventTypeEnum> *_currentState;

很抱歉误导了你们,伙计们,并感谢他们推断出这个问题。

1 个答案:

答案 0 :(得分:1)

问题不在你提供的代码中,但很可能是一个State类型的成员,它没有在某个构造函数的初始化列表中初始化,强制编译器默认初始化它,并且编译器找不到合适的构造

我只能假设第98行在Fsm构造函数中,且Fsm的成员类型为State<...>