C++ 如何在结构初始值设定项列表中实例化类

C++ 如何在结构初始值设定项列表中实例化类,c++,class,struct,C++,Class,Struct,给定一个结构: typedef struct { enum IndicatorType model; enum Cards cardIs[NUMBER_OF_CARD_SLOTS]; uint8_t NumberOfS; HardwareTimers HwTimer; Buzzer buzzer; }indicator; 蜂鸣器类实例化为: Buzzer::Buzzer(HardwareTimers* hwTimer) 如何使用初始值设定项列表实例化

给定一个结构:

typedef struct
{
    enum IndicatorType model;
    enum Cards cardIs[NUMBER_OF_CARD_SLOTS];
    uint8_t NumberOfS;
    HardwareTimers HwTimer;
    Buzzer buzzer;

}indicator;
蜂鸣器类实例化为:

Buzzer::Buzzer(HardwareTimers* hwTimer)
如何使用初始值设定项列表实例化结构

我所尝试的:

indicator ind =//ind is short for indicator.
{
    .model              = INDICATOR_MODEL_UNKNOWN,
    .cardIs             = {UNKNOWN_CARD},
    .NumberOfScales     = 0
};
给出“无法将“括号内的初始值设定项列表()”从“括号内的初始值设定项列表”转换为“蜂鸣器”

我不确定如何将蜂鸣器添加到初始值设定项列表中,并将其传递给作为结构一部分的硬件计时器


有什么想法吗?

为什么不把
指示器
改为一个类呢?如果
蜂鸣器
具有成员函数,则无法从结构“对象”调用这些函数。如果创建一个新的
指示器
类并对其进行实例化,则可以创建一个
蜂鸣器
的子类,并保留与您在此处尝试执行的功能相同的所有功能

假设您使用的是C++20,类似的方法应该可以工作:

结构指示器 { 枚举指示符类型模型; 枚举卡片卡片[卡片插槽的数量]; 单位8个; 硬件定时器; 蜂鸣器; };
指示符ind/C++无法动态初始化枚举和任何编译时已解决的声明


它可以通过静态地使用模板来很好地完成

您不需要在c++结构中键入def struct{…}indicator={indicator\u MODEL\u UNKNOWN,{UNKNOWN\u CARD},};参考:初始化的样式,你正在使用的C++中还没有。你是为C++20构建的吗?去掉等号你真的应该在这里写一个构造函数……注意:
struct
class
之间几乎没有区别。您唯一可能注意到的是
class
es默认为
private
access,而
struct
s默认为
public
。描述的代码适用于结构> /COD>以及类< /Cl>。除了默认的访问级别(对于Stult/Bub为类的public),C++中的<代码>类< /> >和结构> <代码>之间没有区别。因此,我不确定在这两者之间切换会有什么好处。我认为切换这两者的想法会使创建
蜂鸣器
类以及
指示器
的实例变得更容易。就我个人而言,我唯一一次使用结构是当它们是简单的离散数据组,不需要任何函数来独立存在时。在这种情况下,
struct
内部嵌套了一个
class
,为什么不把整个东西变成一个
class
,并提供更合适的访问权限呢?@infinity-1,struct在C++11及更高版本中可以有不同的访问级别。当蜂鸣器需要传入HwTimer时,如何实例化蜂鸣器?