对于那些追随传奇的人,我仍然在尝试定义有限状态机,状态&事件采用“适当的”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;
很抱歉误导了你们,伙计们,并感谢他们推断出这个问题。
答案 0 :(得分:1)
问题不在你提供的代码中,但很可能是一个State类型的成员,它没有在某个构造函数的初始化列表中初始化,强制编译器默认初始化它,并且编译器找不到合适的构造
我只能假设第98行在Fsm
构造函数中,且Fsm
的成员类型为State<...>
。