[英]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.