【问题标题】: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<template parameter>::iterator 是类型还是其他类型。显式添加 typeneme 关键字可以解决该问题。
【解决方案2】:
template <typename T>
void test(vector< a<T> >) {
vector< a<T> >::iterator it;
}
迭代器是dependent-name。使用typename vector<a<T> >::iterator it;
n3337 14.6/2
在模板声明或定义中使用的名称,即
假定依赖于模板参数不命名类型,除非
适用的名称查找找到一个类型名称或该名称是合格的
通过关键字类型名。