簡體   English   中英

從結構訪問聯盟成員

[英]Accessing a member of a union from a structure

我有一個結構

typedef struct s_var_types_tag
{
    uint8_t type;
    union {
     s_t1_t t1_data;
     s_t2_t t2_data;
     s_t3_t t3_data;
    }
} s_var_types_t;

我有一個函數指針

void (*xkey_to_type[MAX_TYPES])(s_x1_t *x1key, s_var_types_t *val);

我想使用此函數指針並利用數據類型,並調用特定的指針,即

s_var_types_t* obj;
Suppose obj type has been set (obj->type = t1)
xkey_to_type[obj->type](x1key,obj)

在此函數中,我想設置類型的詳細信息如果obj類型為t1,則可以訪問t1_data,就像其他組件不存在一樣。

obj->t1_data.a =  xxx;

但這顯示了一個錯誤,說

request for memberin something not a structure or union

有什么事嗎

您所使用的稱為“匿名聯合”。 這是C11中出現的新功能。 如果您不使用它,則必須命名您的工會會員。

union {
 s_t1_t t1_data;
 s_t2_t t2_data;
 s_t3_t t3_data;
} u;

首先,給您的union一個名字:

union {
 s_t1_t t1_data;
 s_t2_t t2_data;
 s_t3_t t3_data;
} my_union;

然后,您可以訪問其字段:

obj->my_union.t1_data.a =  xxx;

暫無
暫無

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

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