#define SBD_ID (unsigned char)0x09 struct SBDSerialPort { SBDSerialPort() { header=0xff; useCmd=0x00; } unsigned char header; // 同步头1 0xff unsigned char id; // 当前ID号 0x09 unsigned char cmd1; // 命令字1 unsigned char cmd2; // 命令字2 unsigned char cmd3; // 命令字3 unsigned char useCmd; // 备用 默认0x00 unsigned char dataParity; // 校验和 2-6字节累加和 id~useCmd void dataParitySum(); QByteArray toByteArray(); }; static SBDSerialPort SBD_Cmd1={(unsigned char)0xff,SBD_ID,(unsigned char)0x00,(unsigned char)0x91,(unsigned char)0x00,(unsigned char)0x00,(unsigned char)0x00};为什么会失败
时间: 2023-09-20 16:12:54 浏览: 165
#define((volatile unsigned *) ) 讲解
5星 · 资源好评率100%
根据提供的代码,SBDSerialPort 是一个结构体,包含了多个成员变量和一个成员函数。SBD_Cmd1 是一个静态的 SBDSerialPort 类型的变量,初始化时使用了花括号{}进行赋值,这种方式称为聚合初始化。
根据 C++11 的标准,聚合初始化只适用于以下情况:
1. 所有成员变量都是 public 的,且没有定义构造函数。
2. 所有成员变量都是 public 的,并且定义了构造函数,但没有提供任何构造函数。
3. 所有成员变量都是 public 的,并且定义了构造函数,提供了默认构造函数。
由于 SBDSerialPort 中定义了一个默认构造函数,所以它不符合第2种情况,而 SBDSerialPort 的成员变量并不全都是 public 的,所以也不符合第1种情况。因此,SBD_Cmd1 的初始化会失败。
解决方法有两种:
1. 将 SBDSerialPort 中的构造函数去掉,或者将其改为默认构造函数,这样 SBD_Cmd1 的初始化就符合第2种情况了。
2. 将 SBDSerialPort 中的所有成员变量都改为 public 的,这样 SBD_Cmd1 的初始化就符合第1种情况了。
阅读全文