自定义List迭代器报错:unary '++'未定义问题求助
问题原因
报错的核心是你的List::iterator类未重写前置递增运算符operator++():
- 虽然
iterator继承自const_iterator,但基类的operator++()返回const_iterator&,而iterator作为可修改迭代器,需要返回iterator&类型,编译器无法自动完成派生类到基类的反向转换,因此找不到匹配的一元++运算符。 - 你在
iterator中仅实现了后置递增operator++(int),但该方法内部调用了++(*this)(前置递增),此时会尝试调用基类版本,导致类型不匹配。
修复方案
在iterator类中添加前置递增运算符的重写,确保返回iterator&类型,内部复用基类的递增逻辑即可:
class iterator : public const_iterator { public: iterator() {} Object& operator*() { return const_iterator::retrieve(); } const Object& operator*()const { return const_iterator::operator*(); } // 新增:重写前置递增运算符 iterator& operator++() { // 调用基类的前置递增逻辑 const_iterator::operator++(); return *this; } iterator operator++(int) { iterator old = *this; ++(*this); // 现在调用iterator自身的前置递增,类型匹配 return old; } protected: iterator(Node* p) :const_iterator{ p } {} friend class List<Object>; };
额外注意
你的代码中还有一处潜在问题:back()和pop_back()方法里使用了--end(),但无论是const_iterator还是iterator都没有实现递减运算符operator--(),如果后续需要使用这些方法,需在const_iterator类中添加前置和后置的operator--()实现,示例如下:
// 在const_iterator类的public区域添加 const_iterator& operator--() { current = current->prev; return *this; } const_iterator operator--(int) { const_iterator old = *this; --(*this); return old; }
内容的提问来源于stack exchange,提问作者Russell Butler
相关产品推荐
相关产品推荐

