Ошибка компиляции STL при определении итератора в шаблонном классе

Код ниже дает ошибку:

error: type ‘std::list<T,std::allocator<_Tp1> >’ is not derived from type ‘Foo<T>’
error: expected ‘;’ before ‘iter’

#include <list>

template <class T> class Foo 
{
  public:
      std::list<T>::iterator iter;

  private:
      std::list<T> elements;
};

Почему и что это должно быть должно быть корректным?

5
задан kennytm 11 February 2010 в 07:13
поделиться

2 ответа

Вам нужен typename std::list::iterator. Это происходит потому, что list зависит от параметра шаблона, поэтому компилятор не может знать, как именно будет называться iterator внутри него (ну, технически он мог бы знать, но стандарт C++ так не работает). Ключевое слово typename говорит компилятору, что то, что следует за ним, является именем типа.

7
ответ дан 13 December 2019 в 22:07
поделиться

Вам нужен typename

template <class T> class Foo  {
    public:
        typename std::list<T>::iterator iter;

    private:
        std::list<T> elements;
};
3
ответ дан 13 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

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