list <T> :: iterator无法正常工作

Mar*_*ney 3 c++ list typename

我正在用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
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

它给了我HashTable.h:77: error: expected ';' before "iter"一个错误信息.

迭代器的正确语法是什么?

或者是这样,我需要为我打算在HashTable模板中使用的每个类创建一个迭代器类?如果是这样,那就太糟糕了......

Oli*_*rth 7

您需要用来typename告诉编译器list<T>::iterator这个上下文中确实是一个类型.

typename list<T>::iterator iter;
Run Code Online (Sandbox Code Playgroud)

原因相当模糊; 有关更多详细信息,请参阅C++ FAQ:http://www.parashift.com/c++-faq-lite/templates.html#faq-35.18.