c(++) union 数据结构
我正在为 µ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'的使用无效”,为什么?
谢谢你!
I'm programming for a µC, i have following data Structure:
typedef struct
{
RF12Head head;
typedef union
{
uint8_t raw[40];
typedef struct
{
node_id nodeId;
uint8_t hierachyDepth;
} MessageNodeFound;
} data;
} RF12Message;
A RF12Message contains a header an an data part.
Now i want to have different message formats.
I want to be able to do something like this:
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;
but the compiler aways throws an error: "invalid use of 'RF12Message::data'", why?
thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的代码中有太多
typedef
。试试这个:
http://codepad.org/frysgQte
You have too many
typedef
s in your code.Try this:
http://codepad.org/frysgQte
问题在于您的
typedef
语句。 RF12Message::data不是 40 个uint8_t
和MessageNodeFound
的联合
;它是由这些东西组成的数据类型。类似的问题将影响您的
MessageNodeFound
声明。删除两个 typedef,我认为它应该可以工作。The problem is your
typedef
statements. RF12Message::data is not aunion
of 40uint8_t
s and aMessageNodeFound
; it is a datatype consisting of those things.A similar problem will affect your declaration of
MessageNodeFound
. Remove bothtypedef
s, and I think it should work.对于 C++,
typedef 声明只是声明一个类型。也没有名为“MessageNodeFound”或“data”的数据成员。
这应该给你一个想法
For C++
The typedef declarations just declare a type. There is no data member called 'MessageNodeFound' or 'data' also for that matter.
This should give you an idea