无法分配对象,因为其隐式删除了复制赋值运算符错误

时间:2016-01-12 19:45:59

标签: c++ clang

在我的小型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;

有人可以给我建议如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

  

有人可以给我建议如何解决这个问题吗?

当您删除std::vector中的最后一个元素时,它必须移动它后面的所有元素。它可以通过移动赋值(对于C ++ 11或更高版本)或元素的复制赋值运算符来完成。因此,要解决它,您需要为类Brick提供此类运算符,使用不必移动std::liststd::set等元素的容器或存储智能指针而不是对象itselv