我有一个名为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
?
答案 0 :(得分:2)
在listmap
的班级声明中,您提供了最后一种模板类型的默认值(即class Less = xless<Key>
)。
在iterator
的定义中,您再次指定默认值,请将其删除。
template <typename Key, typename Value, class Less>
// ^^^^^^^^^^
class listmap<Key, Value, Less>::iterator
{
//...
}