Шаблонные классы и перегрузка операторов - PullRequest
2 голосов
/ 07 февраля 2012

Как мне перегрузить шаблонный класс, как показано ниже?

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 Ответ

3 голосов
/ 07 февраля 2012
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&
{
  // ...
}

Однако, лучшей идеей будет просто определить эти вещи встроенными в самом классе.У вас есть особая причина для внеклассных определений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...