左值作为赋值的左操作数
当我尝试编译这段代码时,我收到了上述错误:
bullets
声明:
我哪里错了?
答案 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} }