提升MSM伪退出状态

时间:2013-08-19 14:20:16

标签: boost-msm vc10

我正在创建一个Boost MSM状态机,其中一些状态有自己的子状态机。我创建了一个正交区域,根据Boost示例,它允许从任何地方发布Error事件以终止状态机。

这很有效,直到我尝试从我的一个子状态机发布一个Error事件。什么都没发生,似乎我需要使用Pseudo Exit状态将Error事件转发到父状态机。这最初起作用,但是当我添加更多伪退出状态以处理来自每个子状态机的错误时,一段时间后发生编译器错误。也无法将其固定下来,可以有1或2个伪退出状态,但最终它只会中断。我在每个子状态机中不再有7个转换,而在父状态中没有9个转换。每个子状态机包含2或3个子状态,父节点有6.

有谁知道为什么会这样?我尝试过交换转换,似乎没有特定的条目是错误的。无法理解可能存在冲突的原因,因为状态名称由父类限定。是因为你应该只有一个Pseudo Exit,即使我有不同的事件触发它?或者只是我的编译器?

这是错误:

error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************(__thiscall boost::mpl::push_front_impl<Tag>::apply<Sequence,T>::REQUESTED_PUSH_FRONT_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST::* ***********)(Sequence)' to 'boost::mpl::assert<false>::type'

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

您是否尝试过定义BOOST_MPL_LIMIT_VECTOR_SIZE?

http://www.boost.org/doc/libs/1_54_0/libs/msm/doc/HTML/ch05.html