我的转换表和事件有问题。让我解释一下说明问题的假设计:
我有一个包含 2 个状态(s0 和 s1)和 1 个子状态机(subm1)的状态机(myStateMachine)。
子状态机 subm1 包含初始状态“sub0”和 s1(与 myStateMachine 中的状态相同)。
这是主要的转换表:
事件 'ES1' 上的 s0->s1
事件 'ES2' 上的 s0->s2
事件 'ESUB' 上的 s0->subm1
这是submachine转换表:
事件“ES1”上的 sub0->s1
现在,假设状态 s1 正在使用触发它的事件来提取一些信息,即
struct s1 : public msm::front::state<>
{
template <class Event,class FSM>
void on_entry(Event const& evt,FSM& fsm)
{
evt.getEventData();
}
}
所以每个可以转换到 s1 的事件都需要实现 getEventData() 方法。
-> 这是正常的!
现在我的问题是 ESUB 没有实现 getEventData() 但显然它应该(编译器给出错误)。我不明白为什么。
我没有使用 ESUB 转换到 s1,但我正在使用 ESUB 转换到 subm1,并且 subm1 包含 s1,但那时我没有访问它。
我希望这很清楚。