C ++ Создание контейнероподобного класса

0

Я пытаюсь создать класс, который должен определять поведение алгоритма поиска графа.

Класс получает общий контейнер в качестве аргумента шаблона и действует на основе контейнера

template <typename N, typename E, class Container>
class Frontier {
    private:
        Container frontier;

    public:
        bool isEmpty() { return this.frontier.empty(); }

        typename Graph<N, E>::const_iterator pop() { return this.frontier.pop(); }

        bool push(typename Graph<N, E>::const_iterator it) { return this.frontier.push(it); }
};

но когда я пытаюсь скомпилировать, я получаю

request for member ‘frontier in ‘this, which is of non-class type 

Я знаю, что это можно сделать, потому что контейнеры stl реализованы как таковые

template<class T, Class C = deque<T> > class std::stack;

Я заметил капитал C в классе, поэтому я попытался использовать класс в реализации, но я получил "Класс не был определен" из компилятора. Как я могу это решить?

Теги:
templates
containers

1 ответ

6
Лучший ответ

Вы пропустили конец сообщения об ошибке, которое сообщит вам, что this указатель, и спросите вас, хотите ли вы использовать -> вместо . , Это должно устранить ошибку.

Обратите внимание, что class и typename эквивалентны в списке аргументов шаблона. Ничего страшного, но последовательность приятна. (Обратите внимание, что Class недействителен как ключевое слово. Не знаете, откуда у вас это получилось...)

template <typename N, typename E, typename Container>
class Frontier {
    private:
        Container frontier;

    public:
        bool isEmpty() { return this->frontier.empty(); }

        typename Graph<N, E>::const_iterator pop() { return this->frontier.pop(); }

        bool push(typename Graph<N, E>::const_iterator it) { return this->frontier.push(it); }
};
  • 0
    Не могу поверить, я пропустил это. Я должен обновить этот надоедливый компилятор, чтобы он правильно отображал сообщения об ошибках (это фактически все сообщение об ошибке, и моя версия gcc действительно старая).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню