gpt4 book ai didi

c++ - 为什么这个结构的移动赋值运算符被删除了?

转载 作者:行者123 更新时间:2023-12-01 14:52:57 25 4
gpt4 key购买 nike

当我创建此结构的数组并尝试删除前 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

我认为当 vector 重新排列它的元素时会调用移动赋值运算符,但我不明白为什么它被删除。我删除了 union ,但它仍然产生了这个错误。

最佳答案

删除 const 限定符并将其更改为 bool isA; .您不能修改 isA如果您本质上希望它是一个常数,则在您的结构中。

关于c++ - 为什么这个结构的移动赋值运算符被删除了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61222582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com