提升msm euml融合问题

时间:2017-01-04 16:54:30

标签: c++ boost

我实际上是使用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>’

1 个答案:

答案 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