c(++) union 数据结构

发布于 2024-10-04 18:35:00 字数 611 浏览 2 评论 0原文

我正在为 µ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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一场信仰旅途 2024-10-11 18:35:00

您的代码中有太多 typedef
试试这个:

http://codepad.org/frysgQte

You have too many typedefs in your code.
Try this:

http://codepad.org/frysgQte

GRAY°灰色天空 2024-10-11 18:35:00

问题在于您的 typedef 语句。 RF12Message::data不是 40 个 uint8_tMessageNodeFound联合;它是由这些东西组成的数据类型。

类似的问题将影响您的 MessageNodeFound 声明。删除两个 typedef,我认为它应该可以工作。

The problem is your typedef statements. RF12Message::data is not a union of 40 uint8_ts and a MessageNodeFound; it is a datatype consisting of those things.

A similar problem will affect your declaration of MessageNodeFound. Remove both typedefs, and I think it should work.

分開簡單 2024-10-11 18:35:00

对于 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;
}

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

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文