2

重複の可能性:
「template」および「typename」キーワードをどこに、なぜ配置する必要があるのですか?

ジェネリック型のベクトルのイテレータを宣言するのに問題があります。次のようにコーディングします。

    template <class T> void print(const vector<T>& V )
    {
      vector<T>::const_iterator i;
    }

以下は、予期されるエラーを返します。'i'の前。私が具体的に述べればエラーはありませんvector<int>::const_iterator i;

問題を解決する方法はありますか?

4

2 に答える 2

3

const_iteratorは に依存しているため、このコンテキストでは従属名Tです。typenameキーワードで明示的に修飾しない限り、型に名前を付けないものと見なされます。

template <class T> void print(const vector<T>& V )
{
  typename vector<T>::const_iterator i;
}
于 2012-09-24T12:52:44.953 に答える
1

これを行う必要があります:

  template <class T> void print(const vector<T>& V )
    {
      //T is a dependant type so needs typename
      typename vector<T>::const_iterator i;
    }
于 2012-09-24T12:53:22.737 に答える