C++ c(+;+;)联合数据结构
我正在为µC编程,我有以下数据结构:C++ c(+;+;)联合数据结构,c++,c,data-structures,struct,unions,C++,C,Data Structures,Struct,Unions,我正在为µC编程,我有以下数据结构: typedef struct { RF12Head head; typedef union { uint8_t raw[40]; typedef struct { node_id nodeId; uint8_t hierachyDepth; } MessageNodeFound; } data; } RF12Message; RF12消息包含标题和数据部分。 现在我想有不同的消
typedef struct
{
RF12Head head;
typedef union
{
uint8_t raw[40];
typedef struct
{
node_id nodeId;
uint8_t hierachyDepth;
} MessageNodeFound;
} data;
} RF12Message;
RF12消息包含标题和数据部分。
现在我想有不同的消息格式
我希望能够做到以下几点:
RF12Message msg;
memset(&msg.data.raw, 0xEF, sizeof(msg.data.raw)); // fill in directly
//or indirectly:
msg.data.MessageNodeFound.nodeId = 3;
msg.data.MessageNodeFound.hierachyDepth = 2;
但是编译器会抛出一个错误:“RF12Message::data的使用无效”,为什么
谢谢大家! 问题在于您的
typedef
语句。RF12Message::数据不是由40个uint8_t
s和MessageNodeFound组成的union
;它是由这些内容组成的数据类型
类似的问题将影响您对MessageNodeFound
的声明。删除这两个typedef
s,我认为它应该可以工作。问题在于您的typedef
语句。RF12Message::数据不是由40个uint8_t
s和MessageNodeFound组成的union
;它是由这些内容组成的数据类型
类似的问题将影响您对MessageNodeFound
的声明。删除两个typedef
s,我认为它应该可以工作。您的代码中有太多的typedef
s。
试试这个:
您的代码中有太多的typedef
s。
试试这个:
对于C++
typedef声明只声明一个类型。就这一点而言,没有名为“MessageNodeFound”或“data”的数据成员
这应该给你一个想法
typedef struct
{
typedef union
{
char raw[40];
typedef struct
{
int nodeId;
char hierachyDepth;
} MessageNodeFound;
MessageNodeFound m;
} Data;
Data d;
} RF12Message;
int main(){
RF12Message msg;
memset(&msg.d.raw, 0xEF, sizeof(msg.d.raw)); // fill in directly
//or indirectly:
msg.d.m.nodeId = 3;
msg.d.m.hierachyDepth = 2;
}
对于C++
typedef声明只声明一个类型。就这一点而言,没有名为“MessageNodeFound”或“data”的数据成员
这应该给你一个想法
typedef struct
{
typedef union
{
char raw[40];
typedef struct
{
int nodeId;
char hierachyDepth;
} MessageNodeFound;
MessageNodeFound m;
} Data;
Data d;
} RF12Message;
int main(){
RF12Message msg;
memset(&msg.d.raw, 0xEF, sizeof(msg.d.raw)); // fill in directly
//or indirectly:
msg.d.m.nodeId = 3;
msg.d.m.hierachyDepth = 2;
}
数据是联合的类型定义,而不是变量…数据是联合的类型定义,而不是变量。。。