Это вопрос о области.
С
template <typename E>
Iterator& SearchTree<E>::Iterator::operator++() {}
, когда вы используете символ Iterator
для возвращаемого типа, этот тип не известен в этой области.Вы должны указать его область действия:
template <typename E>
typename SearchTree<E>::Iterator& SearchTree<E>::Iterator::operator++() {}
Как уже упоминалось в комментариях и других ответах, вы также можете использовать трейлинг-тип возврата .Это возможно, потому что тогда область действия известна.
В связанной заметке и о том, почему я добавил ключевое слово typename
для возвращаемого типа, см. Где и почему я должен поставитьключевые слова template и typename?