c++ - 为什么这个结构的移动赋值运算符被删除了?
问题描述
当我创建此结构的数组并尝试擦除前 2 个成员时,它会生成编译器错误(Visual Studio 2019):
struct A {
virtual void unimplemented() = 0;
};
enum B {
a, b, c, d, e, f
};
struct AorB {
const bool isA;
union {
A* a;
B b;
};
AorB(A* aVal) :a(aVal), isA(true) {};
AorB(B bVal) :b(bVal), isA(false) {};
};
int main() {
std::vector<AorB> vec{ a,b,c };
vec.erase(vec.begin(), vec.begin() + 1);
}
错误:
Error C2280 'AorB &AorB::operator =(const AorB &)': attempting to reference a deleted function
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include\xutility 3907
我认为当向量重新排列它的元素时会调用移动赋值运算符,但我不明白为什么它被删除。我删除了联合,但它仍然产生了这个错误。
解决方案
删除 const 限定符并将其更改为bool isA;
. isA
如果您本质上希望它作为常量,则不能在结构内部进行修改。
推荐阅读
- c# - 如果 OnClientClick="return false",LinkButton OnCommand 函数仅在首次单击时触发
- r - R - csv 写/读更改小数分隔符
- ios - UICollectionViewDropDelegate:在删除图标上拖动单元格
- package - 在 La/TeX 中重新创建 KaTeX 仿真?
- python - 如何将默认值写入列,其中默认值是从使用另一个列的函数创建的值?
- c - 使用 for 循环分配内存
- powerbi - 此 SQL 窗口函数的 PowerBI/DAX 查询等效项是什么
- google-apps-script - 用于根据复选框移动行的 Google 脚本 - Google 工作表
- node.js - react-boilerplate yarn start:prod 无法访问此站点 localhost 拒绝连接。http://localhost:3000 => https://localhost/
- typescript - TS1183:无法在 Typescript 的环境上下文中声明实现