You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:25:19