3

C++ でテンプレート クラスを作成し、その中で使用std::listしています。何らかの理由で、私のコンパイラは、リストの反復子を宣言および構築しようとしている方法を気に入りません。

私の HashTable.h ファイルには次のものがあります。

template <typename T> class HashTable {
    bool find(T thing) {
        // some code
        list<T>::iterator iter;
        for (iter = table[index].begin(); iter != table[index].end(); ++iter) {
            // some more code
        }
    }

}

そして、それはHashTable.h:77: error: expected ';' before "iter"エラーメッセージとして私に与えます。

イテレータの適切な構文は何ですか?

それとも、HashTable テンプレートで使用する予定のクラスごとに反復子クラスを作成する必要がありますか? だったらヤバイだろうな…

4

1 に答える 1

7

このコンテキストでは実際に型であるtypenameことをコンパイラに伝えるために使用する必要があります。list<T>::iterator

typename list<T>::iterator iter;

理由はかなりあいまいです。詳細については、C++ FAQ を参照してください: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.18 .

于 2012-06-09T22:42:42.013 に答える