Шаблонные классы и перегрузка операторов
Как мне перегрузить класс шаблона, как показано ниже?
template <class T>
const_iterator& List<T>::const_iterator::operator++()
{
current = current->next;
return *this;
}
template <class T>
const_iterator List<T>::const_iterator::operator++(int)
{
const_iterator old = *this;
++( *this );
return old;
}
Я получаю ошибки, как показано ниже:
List.cpp:17: error: expected constructor, destructor, or type conversion before ‘&’ token
List.cpp:23: error: expected constructor, destructor, or type conversion before ‘List’
List.cpp:30: error: expected constructor, destructor, or type conversion before ‘&’ token
List.cpp:35: error: expected constructor, destructor, or type conversion before ‘List’
1 ответ
Решение
template <class T>
typename List<T>::const_iterator& List<T>::const_iterator::operator++()
Когда указан тип возврата, вы не находитесь в так называемой лексической области видимости. List<T>
, И так как нет типа const_iterator
во вложенной области видимости вы получаете ошибку (хотя она может проявиться немного лучше, ИМХО).
Другой вариант для C++11 может быть конечным типом возврата:
template<class T>
auto List<T>::const_iterator::operator++()
-> const_iterator&
{
// ...
}
Тем не менее, лучшей идеей было бы просто определить эти вещи встроенными в самом классе. У вас есть особая причина для внеклассных определений?