Объявление члена не найдено во вложенном классе шаблона в C++

Я написал небольшой шаблонный класс на 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 отображает ошибку «Объявление члена не найдено» для перегрузки оператора ++, даже если он определен в общедоступной части класса.

В чем проблема?

ПРИМЕЧАНИЕ. Это только часть кода, все типы, которые не объявлены в этом сегменте кода, определены в исходном файле.


person mittelmania    schedule 14.06.2014    source источник
comment
Код компилируется? Я не могу понять, спрашиваете ли вы об ошибке компилятора или просто о сообщении Eclipse.   -  person Drew Dormann    schedule 14.06.2014
comment
Ваш PriorityQueue<...> объявляет вложенный класс iterator? Почему только форвард-декларация?   -  person Deduplicator    schedule 14.06.2014
comment
IteratorType и ElementType и PriorityQueueElement не определены. Вы также не определяете m_element. Это настоящий код?   -  person n. 1.8e9-where's-my-share m.    schedule 14.06.2014
comment
Как я добавил, это часть реального кода, над которым я работаю (он просто очень длинный). PriorityQueue‹› объявляет итератор и определяет все типы.   -  person mittelmania    schedule 14.06.2014
comment
если вы используете ++, вам также нужно добавить реализацию оператора ++ (int). ваш код кажется правильным, я делаю простой рабочий пример: ideone.com/Csi4g3   -  person uchar    schedule 15.06.2014
comment
Спасибо, хиз! То, что эта часть кода компилируется в ideone, заставляет меня поверить, что это временная неправильная ошибка, выдаваемая Eclipse, поэтому я продолжу работу над кодом, ожидая, что ошибка исчезнет при компиляции.   -  person mittelmania    schedule 15.06.2014


Ответы (1)


Увидев, как пользователь xyz смог написать работающий пример на ideone.com, вероятно, это временная ошибка, которая должна исчезнуть, когда все скомпилируется и заработает.

person mittelmania    schedule 15.06.2014