ไม่พบการประกาศสมาชิกในคลาสเทมเพลตที่ซ้อนกันใน 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
หากคุณใช้ a++ คุณต้องเพิ่มการใช้งานตัวดำเนินการ++(int) ด้วย รหัสของคุณดูเหมือนถูกต้อง ฉันสร้างตัวอย่างการทำงานง่ายๆ ไว้: ideone.com/Csi4g3   -  person uchar    schedule 15.06.2014
comment
ขอบคุณนะ xyz! เมื่อเห็นว่าส่วนนี้ของโค้ดคอมไพล์บน ideone ทำให้ฉันเชื่อว่านี่เป็นข้อผิดพลาดที่ไม่ถูกต้องชั่วคราวที่เกิดจาก Eclipse ดังนั้นฉันจะทำงานกับโค้ดต่อไปโดยคาดหวังว่าข้อผิดพลาดจะหายไปเมื่อคอมไพล์   -  person mittelmania    schedule 15.06.2014


คำตอบ (1)


เมื่อเห็นว่าผู้ใช้ xyz สามารถเขียนตัวอย่างการทำงานบน ideone.com ได้อย่างไร นี่อาจเป็นข้อผิดพลาดชั่วคราวที่ควรจะหายไปเมื่อทุกอย่างคอมไพล์และทำงานอยู่

person mittelmania    schedule 15.06.2014