提问人:Anas Irfan 提问时间:3/5/2022 最后编辑:user4581301Anas Irfan 更新时间:3/5/2022 访问量:261
表达式必须是可修改的左值 C++ 错误
expression must be a modifiable lvalue c++ error
问:
#include<iostream>
#include<array>
#include <algorithm>
using namespace std;
class Array{
//declaring a array
public: int a[4];
public: int num;
public:
Array() {
//initializing a array
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
}
Array(const Array &NewObj){
a = new int[4];
for (int i = 0; i < 4; i++)
a[i] = NewObj.a[i];
}
};
int main()
{
cout<<" DEEP COPY : \n";
cout<<"============ \n";
//creating first object
Array obj1;
//changing value of a array at index 3
obj1.a[3]=15;
//declaring second object which is mapped by object 1
Array obj2(obj1);
cout << "Object 1: \n";
//printing values of a array
for(int i=0;i < (sizeof(obj1.a) / sizeof(obj1.a[0])); i++){
cout<<obj1.a[i];
cout << "\n";
}
cout << "Object 2: \n";
for(int i=0;i < (sizeof(obj2.a) / sizeof(obj2.a[0]));i++){
cout<<obj2.a[i];
cout << "\n";
}
return 0;
}
创建变量的深层副本时:
a = new int[4];
我收到错误:表达式必须是此行的可修改左值。
主要程序的目的是制作数组的深度副本。
我首先定义了类并声明了一个数组。
然后我写了一个构造函数 () { [native code] } 来初始化一个数组。
然后我写了一个复制构造函数 () { [native code] },其中我构建了一个可以保存值的新数组,但它失败了,并出现了关于可编辑值的异常。
答:
0赞
maxrzaw
3/5/2022
#1
你可以摆脱.想一想为什么在常规构造函数中不需要那一行。你真的需要分配更多的内存吗?a = new int[4]
评论
0赞
user4581301
3/5/2022
值得注意的是,数组知道如何在没有进一步帮助的情况下复制自身。不需要复制构造函数或赋值运算符。
上一个:C++ 中的深度复制构造函数
下一个:包含指向指针的对象的深层复制
评论
int a[4];
int a[4];
int *a;
a = new int[4]
public
无处不在,这种奇怪的用法让我认为您正在尝试将 Java 语法强制使用 C++。这是行不通的。无论如何,我建议买一本好的C++书,它应该解释数组是如何工作的,数组和指针之间的区别以及如何使用复制构造函数。new
public: