【问题标题】:Cannot create template vector iterator无法创建模板向量迭代器
【发布时间】:2012-08-12 00:19:59
【问题描述】:

我有一个模板类,我想在vector 中添加此类的实例,然后遍历该vector

使用以下代码:

template <typename T>
class a { };

template <typename T>
void test(vector< a<T> >) {
    vector< a<T> >::iterator it;
}

我得到错误:

In function ‘void test(std::vector<a<T>, std::allocator<a<T> > >)’:
error: expected `;' before ‘it’

我做错了什么?

【问题讨论】:

    标签: c++ templates generics stl


    【解决方案1】:

    你需要

    typename vector< a<T> >::iterator it;
    

    因为iterator 在此上下文中是一个从属名称。这意味着编译器无法知道something&lt;template parameter&gt;::iterator 是类型还是其他类型。显式添加 typeneme 关键字可以解决该问题。

    【讨论】:

      【解决方案2】:
      template <typename T>
      void test(vector< a<T> >) {
          vector< a<T> >::iterator it;
      }
      

      迭代器是dependent-name。使用typename vector&lt;a&lt;T&gt; &gt;::iterator it;

      n3337 14.6/2

      在模板声明或定义中使用的名称,即 假定依赖于模板参数不命名类型,除非 适用的名称查找找到一个类型名称或该名称是合格的 通过关键字类型名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 2016-02-18
        • 2017-07-04
        • 1970-01-01
        • 2012-08-03
        • 1970-01-01
        相关资源
        最近更新 更多