如何为泛型类型的向量声明迭代器?

时间:2012-09-24 12:51:16

标签: c++

  

可能重复:
  Where and why do I have to put the “template” and “typename” keywords?

我在为通用类型的向量声明迭代器时遇到问题。 代码如下:

    template <class T> void print(const vector<T>& V )
    {
      vector<T>::const_iterator i;
    }

以下内容返回预期的错误;于我之前'。 如果我明确说明vector<int>::const_iterator i;

,将不会出现错误

有没有办法解决问题?

2 个答案:

答案 0 :(得分:3)

const_iterator是此上下文中的从属名称,因为它取决于T。除非您使用typename关键字明确限定类型,否则不会命名类型。

template <class T> void print(const vector<T>& V )
{
  typename vector<T>::const_iterator i;
}

答案 1 :(得分:1)

你需要这样做:

  template <class T> void print(const vector<T>& V )
    {
      //T is a dependant type so needs typename
      typename vector<T>::const_iterator i;
    }