C++链表删除时报Lvalue required as left operand of assignment错误如何解决
问题原因
- C++中赋值运算符
=要求左侧必须是可修改的左值(即有明确可写入的内存地址的变量)。你的getnext()函数返回的是next指针的临时副本,属于没有固定内存地址的右值,自然不能直接被赋值。 - 你的
student类已经提供了专门修改next指针的公有成员函数setnext(),调用该方法即可完成赋值操作。
代码修正
首先将报错行替换为调用setnext的写法即可解决编译错误:
prev->setnext(current->getnext());
同时你的del函数还存在其他逻辑错误需要同步修正:
- 代码中
if(current = NULL)是赋值操作,会直接把current置为NULL导致逻辑异常,应该改为等值判断if(current == NULL) - 现有遍历逻辑无法处理头节点就是待删除节点的情况,也无法正常遍历全链表,修正后的完整
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
相关产品推荐
相关产品推荐

