左值作为赋值的左操作数错误

时间:2012-03-31 15:35:15

标签: c++

  

左值作为赋值的左操作数

当我尝试编译这段代码时,我收到了上述错误:

bullets声明:

我哪里错了?

3 个答案:

答案 0 :(得分:3)

解释错误消息:编译器抱怨&(*i) = ...没有意义:&(*i)是一个地址,无法更改。

有关修复,请参阅fontanini的回答。

答案 1 :(得分:2)

你做不到。项目符号包含Part个,而不是Part*。您也无法修改列表中存储的Part对象的内存地址,您可以修改其内容。

您可以使用指针列表:

std::list<Part*> bullets;
/* ... */
*i = new BrokenPart(**i);

注意迭代器上的两个derreference运算符,一次得到Part指针,然后另一个得到引用它。

作为建议,我会告诉你改变你的设计。看起来Part类可以使用state pattern进行重新设计,您应该看看它。

答案 2 :(得分:1)

如果要在预先分配的内存中构建new BrokenPart i指向的对象,可以使用展示位置运算符:{{1} }

查看此问题:What uses are there for "placement new"?