1

私はDcuClientMachine2つの状態を持つステートマシンを作ろうとしています - StandBy(デフォルトのもの) とOperating. StandByは単純な状態Operatingですが、 はネストされた状態であり、状態はParsingデフォルトです。EvConnectingイベントの想定StandBy-> Operating( Parsing)

#include <boost/statechart/event.hpp>
#include <boost/statechart/state_machine.hpp>
#include <boost/statechart/simple_state.hpp>
#include <boost/statechart/transition.hpp>
#include <boost/statechart/custom_reaction.hpp>

namespace sc = boost::statechart;

struct EvConnecting : sc::event<EvConnecting>{};

struct StandBy;
struct DcuClientMachine : sc::state_machine<DcuClientMachine, StandBy>{};

struct Operating;
struct Parsing;

struct StandBy : sc::simple_state<StandBy, DcuClientMachine >
{
    //typedef sc::transition<EvConnecting, Operating> reactions; //(*1)

    typedef sc::custom_reaction<EvConnecting> reactions; //(*2)
    sc::result react( const EvConnecting & )
    {
        return transit< Operating >();

        //return forward_event(  ); //(*3)
    }

};
struct Operating : sc::simple_state<Operating, DcuClientMachine, Parsing>{};
struct Parsing : sc::simple_state<Parsing, DcuClientMachine>{};

int main()
{
    return 0;
}

(*1)と(*2)が生み出す boost\statechart\simple_state.hpp(887): error C2039: 'inner_initial_list' : is not a member of 'DcuClientMachine'

(*3) を使用すると、コードはコンパイルされます。

このコードの何が問題になっていますか?

ありがとうございました。

4

1 に答える 1

1

の定義Parsingが間違っています。そのはず :

struct Parsing : sc::simple_state<Parsing, Operating>{};

ParsingのサブステートであるためOperating

于 2014-01-28T13:30:03.940 に答える