假设我在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_01
或param_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_01
和config.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
}
};
工作演示