Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c(+;+;)联合数据结构_C++_C_Data Structures_Struct_Unions - Fatal编程技术网

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消息包含标题和数据部分。 现在我想有不同的消

我正在为µC编程,我有以下数据结构:

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

数据是联合的类型定义,而不是变量…数据是联合的类型定义,而不是变量。。。