Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法从括号内的初始值设定项列表转换_C++_Initialization - Fatal编程技术网

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)}
,因为复制两次,否则。