在模板类中定义迭代器时出现STL编译错误

时间:2010-02-11 07:08:26

标签: c++ 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;
};

为什么以及这应该是正确的?

2 个答案:

答案 0 :(得分:7)

您需要typename std::list<T>::iterator。这是因为list依赖于模板参数,因此编译器无法知道其中的名称iterator究竟是什么(从技术上讲,它可以知道,但C ++标准不起作用)那样)。关键字typename告诉编译器后面的内容是类型的名称。

答案 1 :(得分:3)

您需要一个类型名称

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

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