将模板化状态向量传递给构造函数的问题 对于那些追随传奇的人来说,我仍然试图用“适当”的C++模式定义有限状态机、状态和事件。
这个代码怎么了将模板化状态向量传递给构造函数的问题 对于那些追随传奇的人来说,我仍然试图用“适当”的C++模式定义有限状态机、状态和事件。,c++,stl,C++,Stl,这个代码怎么了 template <typename StateTypeEnum, typename EventTypeEnum> class Fsm { public: Fsm(E_subSystems subSystem, uint8_t instance, const char * const fsmName, const std::vector<State<StateTypeEnum, EventTypeEn
template <typename StateTypeEnum, typename EventTypeEnum>
class Fsm
{
public:
Fsm(E_subSystems subSystem,
uint8_t instance,
const char * const fsmName,
const std::vector<State<StateTypeEnum, EventTypeEnum> >& states)
{}
应该是什么时候
private: State<StateTypeEnum, EventTypeEnum> *_currentState;
private:State*\u currentState;
很抱歉误导您,各位,感谢您推断出问题所在。问题不在您提供的代码中,但很可能是某个构造函数的初始化列表中未初始化的类型状态成员,强制编译器默认初始化它,编译器没有找到合适的构造函数
我只能假设第98行在
Fsm
构造函数中,并且Fsm
具有类型为State
的成员,尝试将代码减少到仍然编译并给出错误的最小子集。通过执行此练习,您通常会发现错误。如果没有,这将给你一个完美的解决方案张贴在这里。如果没有可编译的示例,则很难解决问题,除非您在10分钟前就遇到了这个问题(或者内存很好)…“仍然可以编译并给出错误”。。。这是很难做到的:)但确实,代码缺少了重要的部分,比如每个类中定义的成员。这些成员会如何影响它?只是好奇(记住,有一个编译器错误)@mawg:如果Fsm有一个State类型的成员不在初始值设定项列表中,编译器将在初始值设定项列表的适当位置注入对默认构造函数的调用,这将触发错误:该成员没有可用的默认构造函数。对于您的特殊问题,我无法使用gcc 3.4.2重现。这里的代码(当我注释掉我不知道的类型时)运行良好!我确信您在解决构造函数问题方面的思路是正确的。是的,第98行是FSM构造函数。FSM有一个成员std::vectorStateTypeEnum,EventTypeEnum\u states代码>我在代码中没有使用初始化列表(我知道这很糟糕),但是STL可能会使用。问题是没有使用初始化列表。向量不应该是一个问题(除非您请求初始大小,或者调整它的大小——与push_back元素相比),但是如果您有一个没有默认构造函数的状态子对象,您将被迫使用初始值设定项列表。
private: State<StateTypeEnum, EventTypeEnum> _currentState;
private: State<StateTypeEnum, EventTypeEnum> *_currentState;