C ++ - 类模板成员的定义

时间:2016-02-05 21:53:09

标签: c++ templates

我有一个名为listmap的成员的模板类iterator

template <typename Key, typename Value, class Less = xless<Key>>
class listmap {
public:
   class iterator;
   //...
}

迭代器的定义超出了列表映射,如下所示,

template <typename Key, typename Value, class Less = xless<Key>>
class listmap<Key, Value, Less>::iterator {
//...
}   

less是用于比较的模板类,

template <typename Type>
struct xless {
   bool operator() (const Type& left, const Type& right) const {
      return left < right;
   }
};

我只是运行一个简单的测试,看它是否有效,但它给了我这个错误

cannot add a default template argument to the definition of a member of a class template

我对模板的理解非常低。为什么我不能在xless的定义中使用iterator

1 个答案:

答案 0 :(得分:2)

listmap的班级声明中,您提供了最后一种模板类型的默认值(即class Less = xless<Key>)。

iterator的定义中,您再次指定默认值,请将其删除。

template <typename Key, typename Value, class Less>
//                                      ^^^^^^^^^^
class listmap<Key, Value, Less>::iterator
{
    //...
}