我正在尝试创建一个状态机DcuClientMachine
,它有两个状态 - 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),那么没关系,代码就会被编译。
这段代码出了什么问题?
谢谢。
答案 0 :(得分:1)
您对Parsing
的定义是错误的。它应该是:
struct Parsing : sc::simple_state<Parsing, Operating>{};
因为Parsing
是Operating
的子状态。