Для тех, кто следит за сагой, я все еще пытаюсь определить конечный автомат, состояния и события "правильным" способом 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)
{}
Сообщение об ошибке only :
нет соответствующей функции для вызова «State :: State ()» fsm.h line 98 C / C ++ Проблема
Похоже, что сообщение об ошибке ссылается на non-existent
конструктор по умолчанию для состояния, но почему?
E_callControlStates, E_callControEvents
были параметрами шаблона для объявления объекта Fsm (без ошибок).
Очевидно, я что-то упускаю из виду и делаю ошибку st00pid n00b, но что? Заранее спасибо
Мой плохой. Конечно, это не имело никакого отношения к коду, который я просматривал - но тогда это редко происходит, не так ли?
Класс Fsm объявлен
private: State<StateTypeEnum, EventTypeEnum> _currentState;
когда это должно было быть
private: State<StateTypeEnum, EventTypeEnum> *_currentState;
Извините за то, что вводите вас в заблуждение, ребята, и спасибо, что вывели проблему, несмотря на это.