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;

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

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

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

Войти через центр авторизации
Похожие вопросы