C++ 初始化构造函数初始化列表中的嵌套结构?

C++ Initialize nested struct in constructor's initialization list?

本文关键字:初始化 嵌套 结构 构造函数 列表 C++      更新时间:2023-10-16
struct B
{
int hh;
int ii;
};          
struct A
{
B b_memberVar;
void *p_data;
};
struct C
{
A array[13];
int bb;
int cc;
int dd;
int ee;
int ff;
int gg;
};
struct D
{
C c_memberVar;
int aa;
};
class XYZ
{
XYZ();
D m_DMemberVar;
int zz;
}
XYZ::XYZ():
m_DMemberVar(
({{{
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr},
{{0,0},nullptr}
},0,0,0,0,0,0},0}),
zz(0)
){}

如何初始化构造函数初始化列表上的类成员变量嵌套结构?我尝试过使用许多嵌套的{},如上面的示例所示,但这会产生语法错误。错误给出了"预期的表达式"answers"预期的a")">

好吧,您的类定义有很多错误:

  • 顺序错误且没有正向声明
  • 缺少分号终止符
  • 缺少构造函数声明
  • 缺少构造函数定义体
  • 示例/占位符初始化程序无效

但是,一旦修复了这些问题,实际上只是匹配你的牙套。

我们来了!

struct D
{
int D_MemberVar;
};
struct C
{
int* c_ptrMemberVar;
};
struct B
{
C c_memberVar;
D* d_ptrMemberVar;
};
struct A
{
B b_memberVar;
int int_memberVar;
};
class XYZ
{
A m_memberVar;
int z;
public:
XYZ();
};
XYZ::XYZ()
: m_memberVar{
{    // A::b_memberVar
{   // B::c_memberVar
nullptr    // B::c_ptrMemberVar
},
nullptr  // B::d_ptrMemberVar
},
3    // A::int_memberVar
}
, z(0)
{}
int main()
{
XYZ xyz;
}

(现场演示)

我怀疑关键是您试图使用A的构造函数,但该类中没有非默认构造函数。所以你也需要顶级的{}