C++ 无法从括号内的初始值设定项列表转换
我试图编译下面的代码,但我一直遇到错误C++ 无法从括号内的初始值设定项列表转换,c++,initialization,C++,Initialization,我试图编译下面的代码,但我一直遇到错误 无法将“{1,2},{5,6}”从“”转换为“Class1”。我正在-std=c++11中编译代码。我的初始化错误吗 class Class1 { public: vector<vector<int> > a; Class1(vector<vector<int> > p) { for(int i = 0; i < 2; i++) for(
无法将“{1,2},{5,6}”从“”转换为“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类
{
公众:
载体a;
类别1(向量p)
{
对于(int i=0;i<2;i++)
对于(int j=0;j<2;j++)
a[i][j]=p[i][j];
}
};
int main()
{
Class1 ClassValue={{1,2,},{5,6};
返回0;
}
首先,将您的行更改为:
Class1 ClassValue ({{ 1, 2 },{ 5, 6 } });
第二件事是,当您写入不存在的内存时,构造函数无效。相反,请使用:
Class1(vector<vector<int> > p):a(p){}
Class1(向量p):a(p){
评论后编辑:这一条会更好(更快),因为你不需要第二次复制
Class1(vector<vector<int> > p):a(move(p)){}
Class1(向量p):a(移动(p)){
。你大概是在调用Class1({1,2},{5,6})
,这是一个只取1的函数的2个参数。你的构造函数是无用的,默认情况下。。。。事实上,您的构造函数是错误的,a
没有调整大小。OT:请注意,复制向量时不需要这些循环。你所要做的就是写a=p
。也可以在成员初始值设定项列表中完成(Class1(…):a{p}{}
)。您还复制了两次而不是一次,因此您可能应该编写Class1(…):a{std::move(p}{}
循环一开始就不好,即使它起作用了。您不应该使用像2
这样的幻数,甚至不应该使用变量来确定条目的数量。向量有一个大小()
member函数——使用它来确定条目数,而不是幻数。a{std::move(p)}
,因为复制两次,否则。