无法从大括号括起来的初始化列表转换
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)){}
以上是关于无法从大括号括起来的初始化列表转换的主要内容,如果未能解决你的问题,请参考以下文章