テンプレートタイプのイテレータのSTLオブジェクトを作成する方法は? 私は、これは、g ++およびVC++でどこの両方失敗しテンプレートタイプのイテレータのSTLオブジェクトを作成する方法は?
vector<vector<T>::iterator> it1;
以下のようにテンプレートの種類のイテレータのSTLオブジェクト(例えばベクター)を作成しようとしています。両方のコンパイラあなたはそれがたとえば
のために働くコンクリートタイプのイテレータを作成している場合は、ほぼ同じことG ++
Main.cpp:8:49: error: type/value mismatch at argument 1 in template parameter li
st for `template<class _T1, class _T2> struct std::pair'
Main.cpp:8:49: error: expected a type, got `std::vector<T>::iterator'
VC++
error C2923: 'std::vector' : 'std::vector<T>::iterator' is not a valid template type argument for parameter '_Ty'
オフコースを語ります
vector<vector<int>::iterator> it1;
ここでは最低限の失敗例である
#include<vector>
#include<iterator>
using namespace std;
template<typename T>
class Spam {
public:
vector<vector<int>::iterator> it1; #Compiles Fine
vector<vector<T>::iterator> it2; #Fails
};
NOTE
タイプに依存する場合は、その後、1キーワードtypename
の前に付ける必要がある場合私は答えから理解することです。そうであれば、
vector< vector<T> > it;
も失敗するはずですが、そうではありません。 iterator
が依存名であるので、それはテンプレートに依存することは、ある
vector<typename vector<T>::iterator> it2;
:依存名はtypedef
注記が間違っています。タイプに名前を付ける従属名は 'typename'を必要としますが、'ベクトル> 'ケースには従属名はありません。(どちらも 'vector'でも' T'でもない) –
MSalters