C++ Boost状态图“状态上下文”为空

C++ Boost状态图“状态上下文”为空,c++,boost,state-machine,statechart,C++,Boost,State Machine,Statechart,我现在有一个小的sm,只有一个state。 我想从状态中访问sm在施工时接收和存储的一些数据: struct数据{ std::字符串m_ip; 数据(常量字符*ip) :m_ip(ip) { } }; 命名空间sc=boost::statechart; 结构s1; 结构sm:sc::状态机{ 数据*m_数据; sm(数据*d) :m_数据{d} { } }; 结构s1:sc::简单_状态{ s1() { std::cout m_ip;//断言 } }; int main() { 数据(“192.

我现在有一个小的
sm
,只有一个
state

我想从
状态
中访问
sm在施工时接收和存储的一些
数据

struct数据{
std::字符串m_ip;
数据(常量字符*ip)
:m_ip(ip)
{
}
};
命名空间sc=boost::statechart;
结构s1;
结构sm:sc::状态机{
数据*m_数据;
sm(数据*d)
:m_数据{d}
{
}
};
结构s1:sc::简单_状态{
s1()
{
std::cout m_ip;//断言
}
};
int main()
{
数据(“192.168.1.1”);
sm(和)sm数据;;
_sm.initiate();
返回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.
test:/usr/include/boost/statechart/simple\u state.hpp:682:静态OtherContext&boost::statechart::simple\u state::context\u impl\u other\u context::context\u impl(state&)[与OtherContext=sm;state=boost::statechart::simple\u state;MostDerived=s1;context=sm;InnerInitial=boost::mpl::list;boost::statechart::history\u mode history=(boost::statechart::history_mode)0]:断言“get_指针(stt.pContext)!=0”失败。
我不明白为什么上下文指针是空的,我找到了答案。
从断言上面的评论来看,它正盯着我的脸:

//当试图访问外部数据库时,此断言失败
//来自状态的构造函数的上下文,该状态*不是*的子类型
//状态。若要更正此问题,请从状态派生,而不是
//简单状态。
不确定这是否应标记为重复,因为它是同一问题,但触发方式有点不同(上下文是外部状态,而不是状态机本身,如我的情况)