Проблема передачи вектора шаблонных состояний в конструктор - PullRequest
0 голосов
/ 03 февраля 2010

Для тех, кто следит за сагой, я все еще пытаюсь определить конечный автомат, состояния и события "правильным" способом 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;

Извините за то, что вводите вас в заблуждение, ребята, и спасибо, что вывели проблему, несмотря на это.

1 Ответ

1 голос
/ 03 февраля 2010

Проблема не в представленном вами коде, а, скорее всего, в члене типа State, который не инициализируется в списке инициализации какого-либо конструктора, что вынуждает компилятор инициализировать его по умолчанию, и компилятор не находит подходящий конструктор.

Я могу только предположить, что строка 98 находится в конструкторе Fsm и что Fsm имеет член типа State<...>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...