error: lvalue required as left operand of assignment &p[i] = &p[i+1]; ^
时间: 2024-09-12 22:02:41 浏览: 61
这个C/C++编译器错误提示 "lvalue required as left operand of assignment" 意味着在赋值操作的左边,你需要一个可以被修改的变量(也就是左值),但在这里,`&p[i]`是一个指针常量(pointer constant),它不是一个可以被赋值的对象。
在这行代码 `&p[i] = &p[i+1];` 中,你试图将地址 `&p[i+1]` 赋给 `&p[i]` 的地址,但实际上这是不允许的,因为指针常数是不可变的,它们不能被改变。如果你的意图是交换两个相邻元素的地址,你应该对 `p[i]` 和 `p[i+1]` 进行实际的值(而不是地址)的交换:
```cpp
void swap(STU* &a, STU* &b) {
STU* temp = a;
a = b;
b = temp;
}
// 使用时
swap(p+i, p+i+1);
```
或者如果你只是想简单地移动指针位置,你可以这样做:
```cpp
p[i] = p[i + 1]; // 现在是交换结构体的内容
p[i+1] = nullptr; // 或者设置下一个元素为nullptr,取决于上下文
```
相关问题
error: lvalue required as left operand of assignment res && sum += n
这个错误通常是因为你尝试在一个非左值(rvalue)上执行赋值操作,而 C++ 中赋值运算符只能应用于左值(lvalue)。在这个错误信息中,表达式 `res && sum += n` 中的 `res` 是一个右值,不能被赋值。
可能的原因是你对一个函数返回值或表达式的结果尝试进行赋值,或者使用了诸如“++”、“--”等修改值的操作符,但是操作数不是左值。你需要检查代码中的语句,确保赋值操作的目标是左值。
error: lvalue required as left operand of assignment
这个错误通常出现在你尝试对一个非 lvalue 类型的表达式进行赋值操作时。lvalue 是指一个可以出现在赋值操作左侧的表达式,即可以被赋值的表达式。例如,变量、数组元素、结构体成员等都是 lvalue,而字面量、表达式的结果等都不是 lvalue。
解决这个错误的方法是检查你的代码,看看是否在赋值操作左侧使用了一个非 lvalue 的表达式。如果是,则需要修改代码,使其使用一个 lvalue 表达式作为左侧操作数。
阅读全文