下面的代碼無法編譯:boost :: statechart:如何定義某個狀態的兩個子狀態,而不指定哪一個是默認狀態?
namespace sc = boost::statechart;
class Active;
class FSM : public sc::state_machine< FSM, startup>
{
};
class ev_1 : public sc::event<ev_1> {};
class ev_2 : public sc::event<ev_2> {};
class Active : public sc::simple_state< Active, FSM >
{
public:
typedef boost::mpl::list<
sc::custom_reaction<ev_1>,
sc::custom_reaction<ev_2>
> reactions;
sc::result react(const ev_1 &);
sc::result react(const ev_2 &);
};
class state_1 : public sc::simple_state< state_1, Active >
{
public:
state_1(){};
~state_1(){};
};
class state_2 : public sc::simple_state< state_2, Active >
{
public:
state_2(){};
~state_2(){};
};
sc::result startup::react(const ev_1 &)
{
return transit<state_1>();
}
sc::result startup::react(const ev_2 &)
{
return transit<state_2>();
}
這個問題似乎是激活狀態必須指定在其定義他們的孩子狀態。就像我做了以下事情:
class Active : public sc::simple_state< Active, FSM, state_1 > { ... };
編譯結果成功。我可以避免指出默認狀態嗎?
P.S.編譯錯誤的一部分,我發現它很重要,它說:simple_state.hpp:388: error: invalid application of ‘sizeof’ to incomplete type ‘boost_1_49_0::STATIC_ASSERTION_FAILURE<false>’
但它對我沒有太多的意義。
轉到「simple_state.hpp:388」這一行,並在那裏看到註釋。 –