在我的小型arkanoid克隆游戏中,我试图从矢量中删除一些值。此向量包含Brick类,它们以类似网格的模式在屏幕上实例化。当球与砖之间发生碰撞时,砖需要消失。我试图用这一小段代码来实现这个目标:
for (int i = 0; i < bricks.size(); ++i)
{
if (bricks[i].destroyed)
{
bricks.erase(bricks.begin()+i);
}
}
但不幸的是我得到了这个编译错误:
Object of type 'Brick' cannot be assigned because its copy assignment operator is implicitly deleted
当我点击此错误时,它会将我带到这段代码:
for (; __first != __last; ++__first, (void) ++__result)
*__result = _VSTD::move(*__first);
return __result;
有人可以给我建议如何解决这个问题吗?
答案 0 :(得分:3)
有人可以给我建议如何解决这个问题吗?
当您删除std::vector
中的最后一个元素时,它必须移动它后面的所有元素。它可以通过移动赋值(对于C ++ 11或更高版本)或元素的复制赋值运算符来完成。因此,要解决它,您需要为类Brick
提供此类运算符,使用不必移动std::list
或std::set
等元素的容器或存储智能指针而不是对象itselv