表达式必须是可修改的左值 C++ 错误

expression must be a modifiable lvalue c++ error

提问人:Anas Irfan 提问时间:3/5/2022 最后编辑:user4581301Anas Irfan 更新时间:3/5/2022 访问量:261

问:

#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] },其中我构建了一个可以保存值的新数组,但它失败了,并出现了关于可编辑值的异常。

C++ 复制构造函数 Deep-Copy

评论

1赞 HolyBlackCat 3/5/2022
如果使用 创建数组,则不需要自定义复制构造函数,因为隐式生成的构造函数将执行正确的操作。但是,如果你替换为(不要忘记在分配元素之前添加到默认的 ctor) - 那么你的复制 ctor 就会开始看起来正确。int a[4];int a[4];int *a;a = new int[4]
1赞 Yksisarvinen 3/5/2022
public无处不在,这种奇怪的用法让我认为您正在尝试将 Java 语法强制使用 C++。这是行不通的。无论如何,我建议买一本好的C++书,它应该解释数组是如何工作的,数组和指针之间的区别以及如何使用复制构造函数。new
0赞 Pete Becker 3/5/2022
代码注释:您不必一直说 .第一个就足够了。在出现不同的访问说明符之前,它之后的所有内容都是公开的。public:

答:

0赞 maxrzaw 3/5/2022 #1

你可以摆脱.想一想为什么在常规构造函数中不需要那一行。你真的需要分配更多的内存吗?a = new int[4]

评论

0赞 user4581301 3/5/2022
值得注意的是,数组知道如何在没有进一步帮助的情况下复制自身。不需要复制构造函数或赋值运算符。