2016-02-05 78 views
0

我有一个模板类listmap,其成员名为iteratorC++ - A类模板成员的定义

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

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

回答

2

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

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

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