C++ 未初始化的结构成员 - 字段不存在
C++ Unintialized struct member - field does not exist
我的 C++ 代码中有以下结构。
struct XYZ {
double x;
double y;
double z;
};
struct Data {
XYZ xyz_point;
double item_1;
double item_2;
double item_3;
};
在我的代码中,我创建了一个结构向量 Data
。
std::vector<Data> data_vector;
for (i = 0; i < 5; i++) {
Data data_point_1;
data_point_1.xyz_point.x = 10.0;
data_point_1.xyz_point.y = 11.0;
data_point_1.xyz_point.z = 12.0;
data_point_1.item_1 = 13.0;
data_point_1.item_2 = 14.0;
data_point_1.item_3 = 15.0;
data_vector.push_back(data_point_1);
}
代码构建成功,没有任何错误,但是在 CPP_Check 期间,我得到以下 warnings/error。 data_point_1
没有字段 x
、y
和 z
。
[test.cc:122]: (error: uninitStructMember) Uninitialized struct member: data_point_1.x
[test.cc:122]: (error: uninitStructMember) Uninitialized struct member: data_point_1.y
[test.cc:122]: (error: uninitStructMember) Uninitialized struct member: data_point_1.z
你能帮我解决这个问题吗?
谢谢,
push_back
需要默认构造函数。编译器能够提供它,但它不会初始化 double
s.
CPP_Check 发现了。
一个解决方法是使用 emplace_back
代替 initialiser-list 语法。这不需要默认构造函数。另一种选择是提供一个初始化成员的默认构造函数。
我的 C++ 代码中有以下结构。
struct XYZ {
double x;
double y;
double z;
};
struct Data {
XYZ xyz_point;
double item_1;
double item_2;
double item_3;
};
在我的代码中,我创建了一个结构向量 Data
。
std::vector<Data> data_vector;
for (i = 0; i < 5; i++) {
Data data_point_1;
data_point_1.xyz_point.x = 10.0;
data_point_1.xyz_point.y = 11.0;
data_point_1.xyz_point.z = 12.0;
data_point_1.item_1 = 13.0;
data_point_1.item_2 = 14.0;
data_point_1.item_3 = 15.0;
data_vector.push_back(data_point_1);
}
代码构建成功,没有任何错误,但是在 CPP_Check 期间,我得到以下 warnings/error。 data_point_1
没有字段 x
、y
和 z
。
[test.cc:122]: (error: uninitStructMember) Uninitialized struct member: data_point_1.x
[test.cc:122]: (error: uninitStructMember) Uninitialized struct member: data_point_1.y
[test.cc:122]: (error: uninitStructMember) Uninitialized struct member: data_point_1.z
你能帮我解决这个问题吗?
谢谢,
push_back
需要默认构造函数。编译器能够提供它,但它不会初始化 double
s.
CPP_Check 发现了。
一个解决方法是使用 emplace_back
代替 initialiser-list 语法。这不需要默认构造函数。另一种选择是提供一个初始化成员的默认构造函数。