无法从大括号括起来的初始值设定项列表转换

Could not convert from brace-enclosed initializer list

本文关键字:转换 列表 起来      更新时间:2023-10-16

>我正在尝试编译下面的代码,但一直遇到错误 could not convert '{{1, 2}, {5, 6}}' from '<brace-enclosed initializer list>' to 'Class1' .我正在-std=c++11编译代码。我的初始化有误吗?

class Class1
{
public:
    vector<vector<int> > a;
    Class1(vector<vector<int> > p)
    {
        for(int i = 0; i < 2; i++)
            for(int j = 0; j < 2; j++)
                a[i][j] = p[i][j];
    }
};
int main()
{
    Class1 ClassValue =   {{ 1, 2, },{ 5, 6 } };
    return 0;
}

首先,将行更改为:

Class1 ClassValue ({{ 1, 2 },{ 5, 6 } });

第二件事是你的构造函数是无效的,因为你写入不存在的内存。相反,请使用:

Class1(vector<vector<int> > p):a(p){}

评论后编辑:这个会更好(更快(,因为您不会第二次复制。

Class1(vector<vector<int> > p):a(move(p)){}