Я пытаюсь создать класс, который должен определять поведение алгоритма поиска графа.
Класс получает общий контейнер в качестве аргумента шаблона и действует на основе контейнера
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 в классе, поэтому я попытался использовать класс в реализации, но я получил "Класс не был определен" из компилятора. Как я могу это решить?
Вы пропустили конец сообщения об ошибке, которое сообщит вам, что 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); }
};