对象不能被赋值,因为它的复制赋值运算符被隐式删除错误

Ern*_*nst 6 c++ clang

在我的小型砖石克隆游戏中,我试图从向量中删除一些值。该向量包含 Brick 类,它们以网格状模式在屏幕上实例化。当球和砖块发生碰撞时,砖块需要消失。我试图用这段代码来完成这个:

for (int i = 0; i < bricks.size(); ++i)
{
    if (bricks[i].destroyed)
    {
        bricks.erase(bricks.begin()+i);
    }
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是我得到这个编译错误:

Object of type 'Brick' cannot be assigned because its copy assignment operator is implicitly deleted
Run Code Online (Sandbox Code Playgroud)

当我点击这个错误时,它把我带到了这段代码:

for (; __first != __last; ++__first, (void) ++__result)
    *__result = _VSTD::move(*__first);
return __result;
Run Code Online (Sandbox Code Playgroud)

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

Sla*_*ica 7

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

当您删除 a 中的非最后一个元素时std::vector,它必须将所有元素移动到它后面。它可以通过移动赋值(对于 C++11 或更高版本)或元素的复制赋值运算符来完成。所以要解决这个问题,你要么需要为 class 提供这样的操作符Brick,使用不需要移动元素的容器,std::list或者std::set等等,或者存储智能指针而不是它们自己的对象。