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

问题描述 投票:1回答:1

我正在尝试编译下面的代码,但我一直遇到错误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;
}
c++ initialization
1个回答
1
投票

首先,将您的行更改为:

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

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

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

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

Class1(vector<vector<int> > p):a(move(p)){}
© www.soinside.com 2019 - 2024. All rights reserved.