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 に答える