Я написал небольшой класс шаблонов в C++, представляющий очередь приоритетов. Тем не менее, я продолжаю получать "Объявление участника не найден" для всех написанных мной функций, которые являются частью вложенного класса внутри класса PriorityQueue, который должен возвращать новый экземпляр этого же объекта.
Сегмент проблемного кода следующий:
template<typename PriorityType, typename DataType>
class PriorityQueue<PriorityType, DataType>::iterator {
public:
// Default constructor
iterator(ElementType& element) : m_element(&element) {}
// Operator overloads
DataType& operator*() const;
IteratorType operator+(const IteratorType& other) const;
iterator& operator++();
iterator operator++(int);
bool operator==(const iterator& it) const;
bool operator!=(const iterator& it) const;
};
// Prefix Increment (++i) operator overload
template<typename PriorityType, typename DataType>
typename PriorityQueue<PriorityType, DataType>::iterator& PriorityQueue<
PriorityType, DataType>::iterator::operator++() {
this->m_element =
(PriorityQueueElement<PriorityType, DataType>) *(this->m_element).m_next;
return *this;
}
В этом случае Eclipse отображает ошибку "Member declare not found" для перегрузки operator++, даже если она определена в общедоступной части класса.
В чем проблема?
ПРИМЕЧАНИЕ. Это только часть кода, все типы, которые не объявлены в этом сегменте кода, определены в исходном файле.
Увидев, как пользователь xyz смог написать рабочий пример на ideone.com, это, вероятно, временная ошибка, которая должна исчезнуть, когда все скомпилируется и работает.
PriorityQueue<...>
объявляет вложенныйiterator
класса? Почему только предварительная декларация?