我在使用以下代码时遇到问题:
#include "tinyfsm.hpp"
struct Event : tinyfsm::Event { };
struct State1;
struct State2;
struct Fsm : tinyfsm::Fsm<Fsm> {
virtual void react(Event const &) { }
virtual void entry() { }
void exit() { };
virtual ~Fsm() { }
};
struct State1 : Fsm{
void react(Event const & event) override { transit<State2>(); }
void entry() override { }
};
struct State2 : Fsm{
void react(Event const & event) override { transit<State1>(); }
void entry() override { }
};
FSM_INITIAL_STATE(Fsm, State1)
编译器给出消息:
"..\src\tinyfsm.hpp", line 134: cc0513: error: a value of type "State2 *" cannot be assigned to an entity of type "Fsm *"
current_state_ptr = &_state_instance<S>::value;
^
detected during instantiation of "void tinyfsm::Fsm<F>::transit<S>() [with F=Fsm, S=State2]" at line 31 of "..\src\testbed.cpp"
我很确定这是因为编译器不理解 State2 继承自 Fsm。
有什么办法可以打破循环依赖,或者给编译器相关信息,以便它能够正确编译?
我正在使用 ccblkfn.exe 版本 8.12.0.0(在 blackfin 处理器上工作)
我认为这可能是一个编译器错误,因为这段代码在 g++ 6.3.0 上编译得很好。