Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Видимость наследуемого определения


Автор: Хоббит 13.1.2012, 15:12
Не знаю, как точно назвать тему. Суть вопроса такая. 
Реализовываю Avltree. Делаю для него итератор, наследую его от std::iterator.
По идее в std::iterator определены типы iterator_category, value_type, reference и.т.д.
Не получается их использовать в определении итератора.

Код

template <typename T>
class Avltree<T>::iterator : public std::iterator<std::bidirectional_iterator_tag, T, std::ptrdiff_t, const T*, const T&>
{
public:                
    reference operator *() const;    // Вот тут сообщение о том, что reference не определен.
...

Автор: bsa 13.1.2012, 15:30
попробуй так: std::iterator<std::bidirectional_iterator_tag, T, std::ptrdiff_t, const T*, const T&>::reference

Автор: spyswamp 13.1.2012, 15:47
http://stackoverflow.com/questions/839958/custom-iterator-in-c

Добавлено через 32 секунды
bsa, typename забыл. smile

Автор: Хоббит 13.1.2012, 16:22
Как жесток Мир.

Автор: xvr 16.1.2012, 14:06
Цитата(Хоббит @  13.1.2012,  16:22 Найти цитируемый пост)
Как жесток Мир

Угу. Что бы он был не так жесток рекомендуется std::iterator<std::bidirectional_iterator_tag, T, std::ptrdiff_t, const T*, const T&> завернуть в typedef, и потом использовать уже его:
Код

template <typename T>
class Avltree<T>::iterator : public std::iterator<std::bidirectional_iterator_tag, T, std::ptrdiff_t, const T*, const T&>
{
 typedef std::iterator<std::bidirectional_iterator_tag, T, std::ptrdiff_t, const T*, const T&> Base;
public:                
    typename Base::reference operator *() const;
...


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)