【发布时间】:2018-03-04 00:04:47
【问题描述】:
我正在尝试编译下面的代码,但我一直遇到错误
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;
}
【问题讨论】:
-
Add another set of braces。您大致调用
Class1({1, 2}, {5, 6}),这是一个只需要1个函数的2个参数。 -
而你的构造函数是没用的,是默认的....其实你的构造函数是错的,
a没有调整大小。 -
OT:请注意,这些循环对于复制向量是不必要的。您所要做的就是写
a = p。它也可以在成员初始化列表 (Class1(...) : a{p} {}) 中完成。你也复制了两次而不是一次,所以你应该写Class1(...) : a{std::move(p} {} -
循环开始不好,即使它有效。您不应该使用像
2这样的幻数,甚至不应该使用变量来确定条目数。vector有一个size()成员函数 -- 使用它来确定条目数,而不是幻数。
标签: c++ initialization