いくつかの状態に独自のサブ状態マシンがあるブースト 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'
何か案は?ありがとう。