无法将模板参数传递给 std::list<T>::iterator [重复]

Posted

技术标签:

【中文标题】无法将模板参数传递给 std::list<T>::iterator [重复]【英文标题】:Cannot pass template argument to std::list<T>::iterator [duplicate] 【发布时间】:2016-06-29 10:51:59 【问题描述】:

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

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&lt;V&gt;::iterator it_; 做错了什么?为什么会是语法错误?

【问题讨论】:

试试typename list&lt;V&gt;::iterator it_; 见Where and why do I have to put the “template” and “typename” keywords? 【参考方案1】:

正如@songyuanyao 所建议的那样,解决方案是将typename 放在list&lt;V&gt;::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++ template typename iterator

【讨论】:

以上是关于无法将模板参数传递给 std::list<T>::iterator [重复]的主要内容,如果未能解决你的问题,请参考以下文章

拥有 X 类,如何将 X 作为模板参数传递给自身?

将成员函数传递给模板函数时出现语法错误

将模板参数传递给调用成员函数的函数

如何将模板参数传递给 CRTP?

如何将两个参数传递给百里香模板?

为啥我不能将函数指针作为模板参数传递给地图?