簡體   English   中英

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

然后,您無需更改其他代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM