2016-10-25 10 views
1

私はこのようになりますクラスを持っている:C++ベクトル<T>

を:私が使用しているとき、彼らはハンドルのためのイテレータをコンパイルしませんように

template<typename T> 
class MyContainer 
{ 

public: 

    struct Handle 
    { 
     public: 

      T* Resolve(); 
    }; 

private: 

    vector<Handle> mHandles; 

}; 

に思えます

vector<Handle>::iterator iter = mHandles.begin(); 

私は自動に変更した場合、それは動作します:

auto& iter = mHandles.begin(); 

が明示的に型を使用すると仮定ではないだろうか?

+0

MCVEを表示してください。 @stackoverflow.com/help/mcve – Brian

+0

@songyuanyao 'mHandles'は私的です。私は彼が' typename vector :: iterator'を試してみるべきだと思います。 – Danh

+0

@ダンええ、あなたは正しいと思います。 – songyuanyao

答えて

5

vector<Handle>::iteratorは依存名で、それゆえあなたがその前typenameが含まれている必要があり、あなたはテンプレート関数/クラス

内で使用するときだけ

typename vector<Handle>::iterator iter = mHandles.begin(); 

vector<Handle>::iterator iter = mHandles.begin(); 

を変更します働くでしょう。

関連する問題