gpt4 book ai didi

c++ - 为什么 = 运算符被删除,我该如何解决它?

转载 作者:太空宇宙 更新时间:2023-11-04 15:13:05 25 4
gpt4 key购买 nike

我正在尝试将数组的其中一个元素设置为不同的对象。但是,编译器正在删除 = 运算符。到底为什么要在这里这样做?我该如何解决?

示例代码:

struct IntContainer
{

IntContainer(const int value) :
value(value)
{
}

IntContainer() :
IntContainer(0)
{
}

const int value;
};

int main(int argc, char** argv)
{

IntContainer intContainers[3];
IntContainer newIntContainer(420);
intContainers[0] = newIntContainer; // <-- Causes compiler error

return 0;
}

我在编译这段代码时遇到的编译器错误是:

main.cpp: In function 'int main(int, char**)':
main.cpp:23:24: error: use of deleted function 'IntContainer& IntContainer::operator=(const IntContainer&)'
intContainers[0] = newIntContainer; // <-- Causes compiler error:
^~~~~~~~~~~~~~~
main.cpp:2:8: note: 'IntContainer& IntContainer::operator=(const IntContainer&)' is implicitly deleted because the default definition would be ill-formed:
struct IntContainer
^~~~~~~~~~~~
main.cpp:2:8: error: non-static const member 'const int IntContainer::value', can't use default assignment operator

最佳答案

编译器一般会免费给你operator=和拷贝构造函数,但是当一个类包含const成员时,生成operator是没有意义的= 因为您不能对 const 成员执行赋值。

您可以自己编写,但您仍然无法为 const 成员赋值。

关于c++ - 为什么 = 运算符被删除,我该如何解决它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46545597/

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