1

我有一个模板类,我想在一个中添加这个类的实例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’

我究竟做错了什么?

4

2 回答 2

1

你需要

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

因为iterator在这种情况下是一个从属名称。这意味着编译器无法知道something<template parameter>::iterator是类​​型还是其他东西。显式添加typeneme关键字可以解决该问题。

于 2012-08-12T00:21:22.453 回答
1
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

在模板声明或定义中使用并且依赖于模板参数的名称被假定为不命名类型,除非适用的名称查找找到类型名称或该名称由关键字 typename 限定。

于 2012-08-12T00:21:41.267 回答