【问题标题】:Can't compile my state machine code无法编译我的状态机代码
【发布时间】:2014-01-28 12:59:53
【问题描述】:

我正在尝试制作一个状态机 DcuClientMachine,它有两个状态 - StandBy(默认状态)和 OperatingStandBy 只是一个简单的状态,而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),那么没关系,代码编译好了。

这段代码有什么问题?

谢谢。

【问题讨论】:

    标签: c++ boost-statechart


    【解决方案1】:

    您对Parsing 的定义是错误的。应该是:

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

    因为ParsingOperating 的子状态。

    【讨论】:

    • 谢谢!你真的帮了我!
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2015-08-13
    • 2023-03-30
    • 2016-07-08
    • 2017-01-16
    • 1970-01-01
    相关资源
    最近更新 更多