我正在创建一个 Boost MSM 状态机,其中一些状态有自己的子状态机。根据 Boost 示例,我创建了一个正交区域,它允许从任何地方发布错误事件以终止状态机。
在我尝试从我的一个子状态机发布错误事件之前,这一直很好。什么也没发生,似乎我需要使用伪退出状态将错误事件转发到父状态机。这最初是有效的,但是当我添加了更多的伪退出状态来处理来自每个子状态机的错误时,一段时间后就会发生编译器错误。也无法确定它,可以有 1 或 2 个伪退出状态,但最终它会中断。我在每个子状态机中没有超过 7 个转换,在父状态机中有 9 个。每个子状态机包含 2 或 3 个子状态,父状态机有 6 个。
有谁知道为什么会发生这种情况?我尝试过交换转换,但似乎没有特定的条目是错误的。看不出为什么会发生冲突,因为状态名称是由父类限定的。是不是因为即使我有不同的事件触发它,您也应该只有一个伪退出?或者它只是我的编译器?
这是错误:
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'
有任何想法吗?谢谢。