gpt4 book ai didi

c++ - 将模板化状态的 vector 传递给构造函数时出现问题

转载 作者:行者123 更新时间:2023-11-28 08:30:51 25 4
gpt4 key购买 nike

对于那些追随传奇的人,我仍在尝试以“正确的”C++ 方式使用模板定义有限状态机、状态和事件。

这段代码有什么问题?

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)
{}

在哪里

template <typename StateTypeEnum, typename EventTypeEnum>
class State
{
public:
State(INPUT E_subSystems subSystem,
StateTypeEnum stateId,
const char * const stateName,
const std::map<Event<EventTypeEnum>, EventHandlerFunction>& events)
{}

唯一错误信息是

no matching function for call to "State<E_callControlStates, E_callControEvents>::State()" fsm.h line 98 C/C++ Problem

看起来错误消息指的是状态的不存在默认构造函数,但为什么呢?

E_callControlStates、E_callControEvents 是声明 Fsm 对象的模板参数(没有错误)。

显然,我忽略了一些东西并犯了一个 st00pid n00b 错误,但是什么?提前致谢


我的错。当然,它与我正在查看的代码无关 - 但它很少这样做,是吗?

声明的Fsm类

private:    State<StateTypeEnum, EventTypeEnum>  _currentState;

本应如此

private:    State<StateTypeEnum, EventTypeEnum> *_currentState;

很抱歉误导你们,伙计们,尽管如此,还是感谢你们推断出了这个问题。

最佳答案

问题不在您提供的代码中,但很可能是某个构造函数的初始化列表中未初始化的 State 类型的成员,迫使编译器默认初始化它,并且编译器找不到合适的构造函数。

我只能假设第 98 行在 Fsm 中构造函数和那个 Fsm有一个 State<...> 类型的成员.

关于c++ - 将模板化状态的 vector 传递给构造函数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com