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

Object cannot be assigned because its copy assignment operator is implicitly deleted error

在我的小型打砖块克隆游戏中,我试图从向量中删除一些值。该向量包含 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;

有人可以告诉我如何解决这个问题吗?

Can somebody give me advice how to solve this?

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