ฉันได้เขียนคลาสเทมเพลตขนาดเล็กใน 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 จะแสดงข้อผิดพลาด "ไม่พบการประกาศสมาชิก" สำหรับโอเปอเรเตอร์++ โอเวอร์โหลด แม้ว่าจะถูกกำหนดไว้ในส่วนพับลิกของคลาสก็ตาม
อะไรคือปัญหา?
หมายเหตุ: นี่เป็นเพียงส่วนหนึ่งของโค้ด ทุกประเภทที่ไม่ได้ประกาศในโค้ดส่วนนี้จะถูกกำหนดไว้ในไฟล์ต้นฉบับ
PriorityQueue<...>
ของคุณประกาศคลาสที่ซ้อนกันiterator
หรือไม่ เหตุใดจึงมีเพียงการประกาศล่วงหน้า? - person Deduplicator   schedule 14.06.2014IteratorType
และElementType
และPriorityQueueElement
ไม่ได้ถูกกำหนดไว้ คุณไม่ได้กำหนดm_element
ด้วย นี่เป็นรหัสจริงเหรอ? - person n. 1.8e9-where's-my-share m.   schedule 14.06.2014