我试图将数组的元素之一设置为另一个对象。但是,编译器正在删除=
运算符。为什么要在这里这样做呢?我该如何解决呢?
示例代码:
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
成员分配值。