Ошибка компиляции STL при определении итератора в классе шаблона - PullRequest
5 голосов
/ 11 февраля 2010

Приведенный ниже код выдает ошибку:

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;
};

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

Ответы [ 2 ]

7 голосов
/ 11 февраля 2010

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

3 голосов
/ 11 февраля 2010

Вам нужно имя типа

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

    private:
        std::list<T> elements;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...