为什么我不能在类中使用参数化构造函数?

Why I can't use parametric constructor within a class?

本文关键字:参数 构造函数 不能 为什么      更新时间:2023-10-16

我在代码中使用的是Eigen 3.3.7库。我可以在main()中创建并填充一个矢量,如下所示:

Vector3d H1(0.0, 0.0, 1.0);
Vector3d H2 = {0.0, 0.0, 1.0};
Matrix3d D(3,2); // Matrix is only initialised

然而,如果我在一个类中也这样做,我会得到语法错误:

class data {
Vector3d H1(0.0, 0.0, 1.0);   //syntax error
Vector3d H = {0.0, 0.0, 1.0}; //still works
MatrixXd D(3,2);              //syntax error
};

问题1:

为什么我不能在类的主体中使用相同的语法?

如何将3乘2矩阵定义为具有本征的data的一个属性?

问题2:

我知道H1(0.0, 0.0, 1.0)版本调用参数构造函数,但是,我不知道Vector3d H2 = {0.0, 0.0, 1.0};行下会发生什么。那么实际上是什么呢?为什么它在第二种情况下有效?

对于Q1,默认成员初始值设定项(自C++11以来(仅支持支撑初始值设定值和等号初始值设定器,而不支持圆括号初始值设定。所以你可以直接

class data {
Vector3d H1{0.0, 0.0, 1.0};
Vector3d H2 = Vector3d(0.0, 0.0, 1.0); // or as you showed, Vector3d H2 = {0.0, 0.0, 1.0}
MatrixXd D1{3, 2};
MatrixXd D2 = MatrixXd(3, 2); // or MatrixXd D2 = {3,2};
};

对于Q2,Vector3d H2 = {0.0, 0.0, 1.0};执行复制列表初始化(由于C++11(,其效果取决于Vector3d的实现方式。(在这种情况下,它似乎与Vector3d H1(0.0, 0.0, 1.0)相同,即调用适当的构造函数来初始化对象。(