在 C++ 中访问联合元素
Accessing union elements in C++
我一直在用 C++ 实现一个通信协议,我决定以下面给定的方式对一个数据包建模。
union control_pkt_u{
struct pkt_parts_t{
uint8_t header[3]; // Control packet header
uint8_t payload[NO_PYLD_BYTES_IN_CONTROL_PACKET]; // Control packet payload
};
uint8_t pkt_array[NO_BYTES_IN_PACKET];
};
只要我需要访问联合的元素
pkt.pkt_parts_t.header[0] = APP_MSG_DEB;
我在编译过程中收到一个错误:
invalid use of struct Manager::control_pkt_u::pkt_parts_t
谁能告诉我我做错了什么?
因为您只是在 control_pkt_u
联合中定义一个结构并且它只是一个声明,所以当您从它创建对象时它不会被初始化。您需要像这样将其声明为会员并到达您的会员pkt_parts_
。
union control_pkt_u {
struct pkt_parts_t {
uint8_t header[3]; // Control packet header
uint8_t payload[NO_PYLD_BYTES_IN_CONTROL_PACKET]; // Control packet payload
} pkt_parts_;
uint8_t pkt_array[NO_BYTES_IN_PACKET];
};
pkt.pkt_parts_.header[0] = APP_MSG_DEB;
您可以使用匿名结构将结构定义更改为此:
struct {
uint8_t header[3]; // Control packet header
uint8_t payload[NO_PYLD_BYTES_IN_CONTROL_PACKET]; // Control packet payload
} pkt_parts_t;
那么其他代码就不用改了
我一直在用 C++ 实现一个通信协议,我决定以下面给定的方式对一个数据包建模。
union control_pkt_u{
struct pkt_parts_t{
uint8_t header[3]; // Control packet header
uint8_t payload[NO_PYLD_BYTES_IN_CONTROL_PACKET]; // Control packet payload
};
uint8_t pkt_array[NO_BYTES_IN_PACKET];
};
只要我需要访问联合的元素
pkt.pkt_parts_t.header[0] = APP_MSG_DEB;
我在编译过程中收到一个错误:
invalid use of struct Manager::control_pkt_u::pkt_parts_t
谁能告诉我我做错了什么?
因为您只是在 control_pkt_u
联合中定义一个结构并且它只是一个声明,所以当您从它创建对象时它不会被初始化。您需要像这样将其声明为会员并到达您的会员pkt_parts_
。
union control_pkt_u {
struct pkt_parts_t {
uint8_t header[3]; // Control packet header
uint8_t payload[NO_PYLD_BYTES_IN_CONTROL_PACKET]; // Control packet payload
} pkt_parts_;
uint8_t pkt_array[NO_BYTES_IN_PACKET];
};
pkt.pkt_parts_.header[0] = APP_MSG_DEB;
您可以使用匿名结构将结构定义更改为此:
struct {
uint8_t header[3]; // Control packet header
uint8_t payload[NO_PYLD_BYTES_IN_CONTROL_PACKET]; // Control packet payload
} pkt_parts_t;
那么其他代码就不用改了