我实际上是使用eUML在boost :: msm中工作,这真的很棒,之前我用它创建了一些更简单的FSM。
但是我遇到了一个问题,我无法解决,所以我希望能在这里得到一些帮助。
代码相当简单(但有点长 - 请参阅本文末尾)。问题位于转换表中,有些人认为错误:
stack ghci
我使用g ++ 5.4.0得到了一个非常长的错误消息,并根据一些无法构建代码的融合代码提升了1.58。第一个错误行如下:
BOOST_MSM_EUML_TRANSITION_TABLE ((
state_entryPrimary == state_init [ fsm_(FsmNo) == Int_<fsm_primary>() ] ,
state_entrySecondary == state_init [ fsm_(FsmNo) == Int_<fsm_secondary>() ] ,
state_1 == state_entryPrimary [ fsm_(uStatus) == Int_<statid_1>() ],
state_2 == state_entryPrimary [ fsm_(uStatus) == Int_<statid_3>() ], //!!!!!
state_3 == state_entryPrimary [ fsm_(uStatus) == Int_<statid_4>() ],
state_6 == state_entryPrimary [ fsm_(uStatus) == Int_<statid_2>() ],
state_4 == state_1 + event_1,
state_5 == state_4 + event_2,
state_1 == state_3 + event_3,
state_7 == state_6 + event_4,
state_exit == state_5 + event_9,
state_exit == state_7 + event_9
), my_transition_table)
如果我注释掉标有// !!!!!的行,FSM编译没有任何问题。
有人在那里,谁可以帮忙解决这个问题?
/usr/include/boost/fusion/container/set/convert.hpp:27:13: error: invalid use of incomplete type ‘struct boost::fusion::detail::barrier::as_set<11>’
答案 0 :(得分:0)
在包含部分之前将FUSION_MAX_VECTOR_SIZE
定义为您需要的任何内容。如果您的转换表超过20个条目,则必须添加以下定义:
#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#define BOOST_MPL_LIMIT_VECTOR_SIZE 30 //max table size
#define BOOST_MPL_LIMIT_MAP_SIZE 30 //max table size
http://www.boost.org/doc/libs/1_63_0/libs/msm/doc/HTML/ch03s02.html#d0e358