赋值的左操作数需要左值错误

lvalue required as left operand of assignment Error

本文关键字:错误 操作数 赋值      更新时间:2023-10-16

赋值的左操作数所需的左值

当我试图编译这段代码时,我得到了上面的错误:

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();

看看这个问题:";放置新的";?

相关文章: