无法从大括号括起来的初始化列表转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法从大括号括起来的初始化列表转换相关的知识,希望对你有一定的参考价值。

我正在尝试编译下面的代码,但我一直遇到错误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)){}

以上是关于无法从大括号括起来的初始化列表转换的主要内容,如果未能解决你的问题,请参考以下文章

大括号括起来的初始值设定项列表转换错误

从朋友类继承时无法使用大括号括起来的初始化列表

类大括号括起来的初始化列表失败

C ++类成员函数别名模板,防止大括号括起来的初始化程序列表被识别为对/元组

Python中方括号和括号括起来的列表有啥区别?

数组必须用大括号括起来的初始化程序 c++ 初始化