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
。描述的代码适用于蜂鸣器
类以及指示器
的实例变得更容易。就我个人而言,我唯一一次使用结构是当它们是简单的离散数据组,不需要任何函数来独立存在时。在这种情况下,struct
内部嵌套了一个class
,为什么不把整个东西变成一个class
,并提供更合适的访问权限呢?@infinity-1,struct在C++11及更高版本中可以有不同的访问级别。当蜂鸣器需要传入HwTimer时,如何实例化蜂鸣器?