2016-02-05 2 views
0

У меня есть класс шаблона listmap с членом, который называется iterator.C++ - Определение элемента A класса 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

Мое понимание шаблона очень низкое. Почему я не могу использовать xless в определении iterator здесь?

ответ

2

В объявлении класса для listmap вы указываете значение по умолчанию для последнего типа шаблона (то есть, class Less = xless<Key>).

В своем определении iterator вы снова указываете значение по умолчанию, удалите его.

template <typename Key, typename Value, class Less> 
//          ^^^^^^^^^^ 
class listmap<Key, Value, Less>::iterator 
{ 
    //... 
} 
Смежные вопросы