如何在C++中初始化嵌套结构



假设我在C++中有以下声明:

struct Configuration {
struct ParametersSetA {
float param_A_01;
float param_A_02;
float param_A_03;
} parameters_set_A;
struct ParametersSetB {
float param_B_01;
float param_B_02;
} parameters_set_B;
};

然后在代码的某个地方,我有以下定义:

Configuration config = {

.parameters_set_A = {
.param_A_01 = 1.0f,
.param_A_02 = 2.0f, 
.param_A_03 = param_A_01 + param_A_02;
},
.parameters_set_B = {
.param_B_01 = 0.50f,
.param_B_02 = 0.75f
}
};

我的问题是初始化(尤其是嵌套结构体ParametersSetA中的param_A_03项(我在C++中使用了以上内容是否正确?

问题是,我们不能使用任何非限定名称param_A_01param_A_02,也不能使用包含这两个名称中任何一个(如param_A_01 + param_A_02(的表达式作为param_A_03的初始值设定项。

此外,您错误地将分号;放在了param_A_01 + param_A_02之后,而不是逗号,。我已经在下面显示的修改程序中纠正了这两个问题:

方法1

//create constexpr variables 
constexpr float A1 = 1.0f;
constexpr float A2 = 2.0f;
Configuration config = {

.parameters_set_A = {
.param_A_01 = A1,
.param_A_02 = A2, 
//--------------vv---vv---->use those constexpr variable(also semicolon is removed from here)
.param_A_03 = A1 + A2
},
.parameters_set_B = {
.param_B_01 = 0.50f,
.param_B_02 = 0.75f
}
};

工作演示

方法2

其他选项是使用限定名称,如config.parameters_set_A.param_A_01config.parameters_set_A.param_A_02,如下所示:

Configuration config = {

.parameters_set_A = {
.param_A_01 = 1.0f,
.param_A_02 = 2.0f, 
//--------------vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv--->qualified name used here
.param_A_03 = config.parameters_set_A.param_A_01 + config.parameters_set_A.param_A_02 
},
.parameters_set_B = {
.param_B_01 = 0.50f,
.param_B_02 = 0.75f
}
};

工作演示

最新更新