【发布时间】:2012-07-10 20:37:26
【问题描述】:
我的转换表和事件有问题。 让我解释一下说明问题的假设计:
我有一个状态机 (myStateMachine),其中包含 2 个状态(s0 和 s1)和 1 个子状态机(subm1)。
子状态机 subm1 包含初始状态“sub0”和 s1(与 myStateMachine 中的状态相同)。
这是主要的转换表:
s0->事件'ES1'上的s1
s0->s2 事件“ES2”
s0->事件'ESUB'上的subm1
这是冲锋转换表:
sub0->s1 事件“ES1”
现在,假设状态 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,但那时我没有访问它。
我希望这很清楚。
【问题讨论】: