2013-12-17 3 views
0

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

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

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 

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

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

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

ответ

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 действительно старая.) –

Смежные вопросы