В качестве учебного задания реализую структуру "Список" в C++. Реализовал основные принципы и простые методы (push_back/push_front, pop_back/pop_front). Теперь хочу реализовать итераторы. Начал с прочтения
этой статьи. В ней говорится, что нужно объявить в своём классе тип итератора и константного итератора. Вот как это делается в статье:
class OwnContainer
{
public:
typedef OwnIterator<int> iterator;
typedef OwnIterator<const int> const_iterator;
}
Вот как это пытаюсь сделать я:
template<typename T>
class List
{
public:
typedef ListIterator<T> iterator;
typedef ListIterator<const T> const_iterator;
}
ListIterator - это класс итератора, который у меня определён ниже основного класса и выглядит так:
template<typename T>
class ListIterator : public std::iterator<std::input_iterator_tag, T>
{
friend class List;
private:
ListIterator(T* p);
T* p;
public:
ListIterator(const ListIterator& it);
bool operator!=(ListIterator const& other) const;
bool operator==(ListIterator const& other) const;
typename ListIterator::reference operator*() const;
ListIterator& operator++();
};
Для сравнения в статье это выглядит так:
template<typename ValueType>
class OwnIterator: public std::iterator<std::input_iterator_tag, ValueType>
{
friend class OwnContainer;
private:
OwnIterator(ValueType* p);
public:
OwnIterator(const OwnIterator &it);
bool operator!=(OwnIterator const& other) const;
bool operator==(OwnIterator const& other) const; //need for BOOST_FOREACH
typename OwnIterator::reference operator*() const;
OwnIterator& operator++();
private:
ValueType* p;
};
Однако у меня возникает следующая ошибка:
синтаксическая ошибка: отсутствие ";" перед "<"
В этой строке:
typedef ListIterator<T> iterator;
Я не могу объяснить природу ошибки и что я должен делать. Возможно, я пропустил что-то очень простое или статья не подходит для моей задачи. Буду благодарен за любую помощь.