1

いくつかの状態に独自のサブ状態マシンがあるブースト MSM 状態マシンを作成しています。Boost の例に従って、直交領域を作成しました。これにより、エラー イベントをどこからでも送信してステート マシンを終了させることができます。

これは、サブ ステート マシンの 1 つからエラー イベントをポストしようとするまではうまくいきました。何も起こらなかったので、Pseudo Exit ステートを使用してエラー イベントを親ステート マシンに転送する必要があるように思われました。これは最初はうまくいきましたが、各サブステート マシンからのエラーを処理するために疑似終了ステートを追加すると、しばらくするとコンパイラ エラーが発生します。それを突き止めることもできず、1つまたは2つの疑似終了状態を持つことができますが、最終的には壊れるだけです。各サブ ステート マシンには 7 つ以上の遷移はなく、親には 9 つしかありません。各サブ ステート マシンには 2 つまたは 3 つのサブ ステートが含まれ、親には 6 つのサブ ステートがあります。

なぜこれが起こるのか誰にも分かりますか?トランジションを交換しようとしましたが、特定のエントリが間違っているようには見えません。状態名が親クラスによってスコープされているため、競合が発生する理由がわかりません。さまざまなイベントがトリガーされているにもかかわらず、疑似出口が 1 つしかないためですか? それとも私のコンパイラだけですか?

エラーは次のとおりです。

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'

何か案は?ありがとう。

4

1 に答える 1

0

BOOST_MPL_LIMIT_VECTOR_SIZE を定義しようとしましたか?

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

于 2013-09-30T10:36:17.510 に答える