使用struct构造数据类型表时出现初始化错误问题咨询
代码问题诊断
- 变量类型不匹配:你声明的
test是单个listType结构体变量,但初始化时传入了2组结构体成员值,相当于试图初始化2个结构体元素,直接触发too many initializers报错。如果你要做可遍历的数据表,应该把test声明为listType类型的数组。 - 结构体成员定义不合法:C++标准不支持结构体中出现未指定长度的数组成员
const char Value[](这种柔性数组用法仅C语言支持,且只能放在结构体末尾),且你的需求是引用外部已定义的foo、bar字符串,直接把成员定义为const char*指针类型更合理。
修复后可正常编译的代码
static const char bar[] = "bar"; static const char foo[] = "foo"; struct listType { const char* Value; // 改为指针类型,指向外部字符串常量 bool successValue; }; // 声明为listType数组,存储两组数据 listType test[] = { {foo, false}, {bar, false} };
后续要修改状态直接操作对应元素即可,比如test[0].successValue = true;可正常执行。
如果你确实需要把字符串内容直接存储在结构体内部,可指定数组成员的固定长度,比如const char Value[16];,初始化时直接传入字符串字面量即可。
内容的提问来源于stack exchange,提问作者Petertk
相关产品推荐
相关产品推荐

