2016-02-05 101 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 
{ 
    //... 
} 
相關問題