我正在为μC编程,我有以下数据结构:
typedef struct
{
RF12Head head;
typedef union
{
uint8_t raw[40];
typedef struct
{
node_id nodeId;
uint8_t hierachyDepth;
} MessageNodeFound;
} data;
} RF12Message;
RF12Message包含标题和数据部分。 现在我想要有不同的消息格式。
我希望能够做到这样的事情:
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'”,为什么?
谢谢你!答案 0 :(得分:3)
问题在于您的typedef
声明。 RF12Message ::数据不 union
的40 uint8_t
和MessageNodeFound
;它是由这些东西组成的数据类型。
类似的问题会影响您对MessageNodeFound
的声明。删除typedef
,我认为它应该有用。
答案 1 :(得分:3)
您的代码中有太多typedef
个。
试试这个:
答案 2 :(得分:0)
对于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;
}