2

可能重复:
我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?

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

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

以下返回预期的错误;于我之前'。如果我特别说明不会有错误vector<int>::const_iterator i;

有没有办法解决这个问题?

4

2 回答 2

3

const_iterator在这种情况下是一个从属名称,因为它依赖于T. 除非您使用typename关键字明确限定类型,否则假定不命名类型。

template <class T> void print(const vector<T>& V )
{
  typename vector<T>::const_iterator i;
}
于 2012-09-24T12:52:44.953 回答
1

你需要这样做:

  template <class T> void print(const vector<T>& V )
    {
      //T is a dependant type so needs typename
      typename vector<T>::const_iterator i;
    }
于 2012-09-24T12:53:22.737 回答