在C++中访问union元素

Ste*_*eve 1 c++ struct unions

我一直在用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];
};
Run Code Online (Sandbox Code Playgroud)

只要我需要访问联合的元素

pkt.pkt_parts_t.header[0] = APP_MSG_DEB; 
Run Code Online (Sandbox Code Playgroud)

我在编译期间收到错误:

invalid use of struct Manager::control_pkt_u::pkt_parts_t
Run Code Online (Sandbox Code Playgroud)

请任何人告诉我我做错了什么?

xec*_*eco 6

因为你只是在你的control_pkt_uunion中定义一个struct 而且它只是一个声明,所以当你从它创建一个对象时它不会被初始化.您需要将其声明为此类会员并与您的会员联系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;
Run Code Online (Sandbox Code Playgroud)