C++定义struct结构体时提示member name not declared错误的原因是什么
问题原因
你写反了C结构体成员/位域的语法顺序。
C中定义普通结构体成员的语法为:类型 成员名;,如果是要定义指定位长度的位域成员,语法为:类型 成员名 : 占用位宽;
你现在把冒号写在了类型和成员名中间,编译器会把冒号后的status解析成位域对应的位宽常量,自然会要求这个常量提前声明,报出未声明的错误。
修正方案
- 如果你不需要用位域,直接删掉冒号即可:
struct fckxMsg_t { unsigned char status; unsigned char data1; unsigned char data2; };
- 如果你确实需要使用位域限定每个成员的占用位数,把冒号移到成员名后面,后面跟上对应的位宽数值即可,示例如下(位宽数值可根据你的实际需求修改):
struct fckxMsg_t { unsigned char status : 1; // 表示status占1位 unsigned char data1 : 4; // 表示data1占4位 unsigned char data2 : 3; // 表示data2占3位 };
内容的提问来源于stack exchange,提问作者f ckx
相关产品推荐
相关产品推荐

