Deklarasi anggota tidak ditemukan di kelas templat bersarang di C++

Saya telah menulis kelas templat kecil di C++ yang mewakili antrian prioritas. Namun, saya terus mendapatkan "Deklarasi anggota tidak ditemukan" untuk semua fungsi yang saya tulis yang merupakan bagian dari kelas bersarang di dalam kelas template PriorityQueue yang seharusnya mengembalikan instance baru dari objek yang sama.

Segmen kode yang bermasalah adalah sebagai berikut:

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;
}

Dalam kasus ini, Eclipse menampilkan kesalahan "Deklarasi anggota tidak ditemukan" untuk kelebihan operator++, meskipun itu didefinisikan di bagian publik kelas.

Apa masalahnya?

CATATAN: Ini hanya sebagian dari kode, semua tipe yang tidak dideklarasikan dalam segmen kode ini ditentukan dalam file sumber.


person mittelmania    schedule 14.06.2014    source sumber
comment
Apakah kodenya dapat dikompilasi? Saya tidak tahu apakah Anda bertanya tentang kesalahan kompiler atau hanya pesan Eclipse.   -  person Drew Dormann    schedule 14.06.2014
comment
Apakah PriorityQueue<...> Anda mendeklarasikan kelas bersarang iterator? Mengapa hanya deklarasi ke depan?   -  person Deduplicator    schedule 14.06.2014
comment
IteratorType dan ElementType dan PriorityQueueElement tidak terdefinisi. Anda juga tidak mendefinisikan m_element. Apakah ini kode asli?   -  person n. 1.8e9-where's-my-share m.    schedule 14.06.2014
comment
Seperti yang saya tambahkan, ini adalah bagian dari kode sebenarnya yang sedang saya kerjakan (sangat panjang). PriorityQueue‹› mendeklarasikan iterator dan semua tipe ditentukan.   -  person mittelmania    schedule 14.06.2014
comment
jika Anda menggunakan a++ Anda perlu menambahkan implementasi operator++(int) juga. kode Anda sepertinya benar. Saya membuat contoh sederhana yang berfungsi: ideone.com/Csi4g3   -  person uchar    schedule 15.06.2014
comment
Terima kasih, xyz! Melihat bahwa bagian kode ini dikompilasi di ideone membuat saya percaya bahwa ini adalah kesalahan sementara yang dilakukan oleh Eclipse, jadi saya akan terus mengerjakan kode tersebut dengan harapan kesalahan tersebut akan hilang saat dikompilasi.   -  person mittelmania    schedule 15.06.2014


Jawaban (1)


Melihat bagaimana pengguna xyz dapat menulis contoh yang berfungsi di ideone.com, ini mungkin merupakan kesalahan sementara yang akan hilang ketika semuanya dikompilasi dan berfungsi.

person mittelmania    schedule 15.06.2014