Pakonigoosy
@Pakonigoosy
Разработчик ПО

Почему при объявлении итератора выдается ошибка?

В качестве учебного задания реализую структуру "Список" в 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;

Я не могу объяснить природу ошибки и что я должен делать. Возможно, я пропустил что-то очень простое или статья не подходит для моей задачи. Буду благодарен за любую помощь.
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
ListIterator - это класс итератора, который у меня определён ниже основного класса

Шаблон класса должен быть определён до его использования.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы