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

时间:2018-03-04 00:04:47

标签: c++ initialization

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

1 个答案:

答案 0 :(得分:1)

首先,将您的行更改为:

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

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

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

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

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