C++ 未初始化的结构成员 - 字段不存在

Posted

技术标签:

【中文标题】C++ 未初始化的结构成员 - 字段不存在【英文标题】:C++ Unintialized struct member - field does not exist 【发布时间】:2020-08-21 10:24:21 【问题描述】:

我的 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 期间,我收到以下警告/错误。 data_point_1 没有字段xyz

[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

你能帮我解决这个问题吗?

谢谢,

【问题讨论】:

【参考方案1】:

push_back 需要默认构造函数。编译器能够提供它,但它不会初始化 doubles。

CPP_Check 发现了这一点。

一种解决方法是使用emplace_back 代替initialiser-list 语法。这不需要默认构造函数。另一种选择是提供一个初始化成员的默认构造函数。

【讨论】:

以上是关于C++ 未初始化的结构成员 - 字段不存在的主要内容,如果未能解决你的问题,请参考以下文章

C++ Struct 未通过 POD 测试

C++ 静态结构类型成员初始化

c++中静态成员变量和静态成员函数(笔试经历)

结构或类以及公共数据呢?

未初始化的 C++ 结构的行为

go语言学习笔记 — 基础 — 高级数据类型 — 结构体:初始化结构体的成员变量