赋值的左操作数需要左值错误
lvalue required as left operand of assignment Error
赋值的左操作数所需的左值
当我试图编译这段代码时,我得到了上面的错误:
bullets
:声明
我哪里错了?
解释错误消息:编译器抱怨&(*i) = ...
毫无意义:&(*i)
是一个地址,无法更改。
关于解决方案,请参阅fontanini的回答。
你不能那样做。项目符号包含Part
s,而不是Part*
。您也不能修改存储在列表中的Part
对象的内存地址,您可以修改它们的内容。
你可以使用一个指针列表:
std::list<Part*> bullets;
/* ... */
*i = new BrokenPart(**i);
注意迭代器上的两个derreference运算符,一个用于获取Part
指针,另一个用于对其进行derreference
作为一个建议,我会告诉你改变你的设计。看起来Part
类可以使用状态模式重新设计,你应该看看它
如果要在存储i
指向的对象的预分配内存上构造new BrokenPart
,可以使用placement-new运算符:new (&(*i)) BrokenPart();
看看这个问题:";放置新的";?
相关文章:
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- 错误 C2679 二进制"<<":未找到采用类型为 'T' 的右侧操作数的运算符
- 错误:'operator>'不匹配(操作数类型为 'Student' 和 'Student'
- 如何摆脱逗号运算符的这个错误右操作数没有效果( wunsued 值)?
- c++ 错误:二进制"运算符+"类型"矩阵*"和"矩阵*"的操作数无效
- 使用堆栈编译错误的 C++ 反向行没有运算符匹配操作数
- 当我尝试构建此程序时,出现此错误:需要左键作为赋值的左操作数
- 错误:二进制">>":未找到采用类型为"const char [1] 的右操作数的运算符
- C++ 重载:[错误] 与'operator='不匹配(操作数类型为 'String' 和"字符串")
- 错误 C2679:二进制'<<':找不到采用类型 'overloaded-function' 的右侧操作数的运算符(或者没有可接受的转换)
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- 错误:与"运算符>>"不匹配(操作数类型为"std::istream
- 错误:C2679 二进制"==":未找到采用类型 'const std::string' 的右侧操作数的运算符(或者没有可接受的转换)
- 错误:与'operator='不匹配(操作数类型为 'PlDrustvo' 和"PlDrustvo")|
- 错误:"->"的基本操作数具有非指针类型"const"
- 使用英特尔线程构建块编译:错误操作数为?:
- 错误:操作数不匹配
- C++错误(操作数类型为"std::string 和 'void")