升压状态图“状态上下文”为空
Boost statechart `state context` is null
我有一个小 sm
,目前只有一个 state
。
我想从 state
中访问 sm
在构造时接收和存储的一些 data
:
struct data {
std::string m_ip;
data(const char* ip)
: m_ip(ip)
{
}
};
namespace sc = boost::statechart;
struct s1;
struct sm : sc::state_machine<sm, s1> {
data* m_data;
sm(data* d)
: m_data { d }
{
}
};
struct s1 : sc::simple_state<s1, sm> {
s1()
{
std::cout << context<sm>().m_data->m_ip; // assertion
}
};
int main()
{
data _data("192.168.1.1");
sm _sm(&_data);
_sm.initiate();
return 0;
}
当我 运行 这样做时,出现以下错误:
test: /usr/include/boost/statechart/simple_state.hpp:682: static OtherContext& boost::statechart::simple_state<MostDerived, Context, InnerInitial, historyMode>::context_impl_other_context::context_impl(State&) [with OtherContext = sm; State = boost::statechart::simple_state<s1, sm>; MostDerived = s1; Context = sm; InnerInitial = boost::mpl::list<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0]: Assertion `get_pointer( stt.pContext_ ) != 0' failed.
我不明白为什么上下文指针是null
。
我找到了答案 here。
从断言上方的评论中,它正盯着我的脸:
// This assert fails when an attempt is made to access an outer
// context from a constructor of a state that is *not* a subtype of
// state<>. To correct this, derive from state<> instead of
// simple_state<>.
不确定是否应将其标记为重复,因为这是同一个问题,但触发方式略有不同(context
是 outer state
,而不是 state machine
本身,就像我的情况一样)。
我有一个小 sm
,目前只有一个 state
。
我想从 state
中访问 sm
在构造时接收和存储的一些 data
:
struct data {
std::string m_ip;
data(const char* ip)
: m_ip(ip)
{
}
};
namespace sc = boost::statechart;
struct s1;
struct sm : sc::state_machine<sm, s1> {
data* m_data;
sm(data* d)
: m_data { d }
{
}
};
struct s1 : sc::simple_state<s1, sm> {
s1()
{
std::cout << context<sm>().m_data->m_ip; // assertion
}
};
int main()
{
data _data("192.168.1.1");
sm _sm(&_data);
_sm.initiate();
return 0;
}
当我 运行 这样做时,出现以下错误:
test: /usr/include/boost/statechart/simple_state.hpp:682: static OtherContext& boost::statechart::simple_state<MostDerived, Context, InnerInitial, historyMode>::context_impl_other_context::context_impl(State&) [with OtherContext = sm; State = boost::statechart::simple_state<s1, sm>; MostDerived = s1; Context = sm; InnerInitial = boost::mpl::list<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0]: Assertion `get_pointer( stt.pContext_ ) != 0' failed.
我不明白为什么上下文指针是null
。
我找到了答案 here。
从断言上方的评论中,它正盯着我的脸:
// This assert fails when an attempt is made to access an outer
// context from a constructor of a state that is *not* a subtype of
// state<>. To correct this, derive from state<> instead of
// simple_state<>.
不确定是否应将其标记为重复,因为这是同一个问题,但触发方式略有不同(context
是 outer state
,而不是 state machine
本身,就像我的情况一样)。