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

C++链表删除时报Lvalue required as left operand of assignment错误如何解决

问题原因
  • C++中赋值运算符=要求左侧必须是可修改的左值(即有明确可写入的内存地址的变量)。你的getnext()函数返回的是next指针的临时副本,属于没有固定内存地址的右值,自然不能直接被赋值。
  • 你的student类已经提供了专门修改next指针的公有成员函数setnext(),调用该方法即可完成赋值操作。
代码修正

首先将报错行替换为调用setnext的写法即可解决编译错误:

prev->setnext(current->getnext());

同时你的del函数还存在其他逻辑错误需要同步修正:

  1. 代码中if(current = NULL)是赋值操作,会直接把current置为NULL导致逻辑异常,应该改为等值判断if(current == NULL)
  2. 现有遍历逻辑无法处理头节点就是待删除节点的情况,也无法正常遍历全链表,修正后的完整del函数参考如下:
void studentlist::del(string n, string f)
{
    student *current = head;
    student *prev = NULL;

    // 处理头节点为待删除节点的情况
    while (current != NULL && current->getname() == n && current->getfac() == f)
    {
        head = current->getnext();
        delete current;
        current = head;
        return; // 如果需要删除所有匹配节点,删除本行即可
    }

    // 遍历剩余节点
    while (current != NULL)
    {
        if (current->getname() == n && current->getfac() == f)
        {
            prev->setnext(current->getnext());
            delete current;
            return; // 如果需要删除所有匹配节点,替换为 current = prev->getnext(); 并删除本行
        }
        prev = current;
        current = current->getnext();
    }
}

内容的提问来源于stack exchange,提问作者Jędrek Orłowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:06