无法将模板参数传递给 std::list:<T>:迭代器

Cannot pass template argument to std::list<T>::iterator

本文关键字:list lt 迭代器 gt std 参数传递      更新时间:2023-10-16

我创建了一个容器模板类如下:

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_;做错了什么?为什么这应该是一个语法错误?

根据@ songyuananyao的建议,解决方案是将typename放在list<V>::iterator之前,如:

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++模板typename iterator