2016-06-29 7 views
1

は、私は次のようにコンテナテンプレートクラスを作った:は::リスト<T>をはstdするテンプレート引数を渡すことはできません::イテレータ

template<typename K, typename V> 
class hash_table { 
public: 
    class iterator { 
    private: 
    list<V> list_;     // Works well 
    list<V>::iterator it_;   // Fails: Syntax-error "iterator" 
    list<int>::iterator it2_;  // Works well 
    }; 
//.... 
} 

誰かが私がlist<V>::iterator it_;で間違って何をしたか、教えてもらえますか?なぜこれが構文エラーであるべきですか? @songyuanyaoが推薦したよう

+4

てみ '型名リスト ::イテレータit_;'。 – songyuanyao

+4

[テンプレートとタイプ名]のキーワードをどこに、どこに入れなければならないのですか?](http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put -the-template-and-typename-キーワード) – songyuanyao

+0

@songyuanyao Thx – Matthias

答えて

1

は、ソリューションは、のようにlist<V>::iteratortypenameを置くことです。また、

template<typename K, typename V> 
class hash_table { 
public: 
    class iterator { 
    private: 
    list<V> list_;     // Works well 
    typename list<V>::iterator it_;   // No more fails 
    list<int>::iterator it2_;  // Works well 
    }; 
//.... 
} 

参照: C++ template typename iterator

関連する問題