从结构访问联合的成员

时间:2014-01-20 10:22:34

标签: c structure unions

我有一个结构

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

有问题吗?

2 个答案:

答案 0 :(得分:2)

您使用的是“匿名工会”。这是C11中出现的一项新功能。如果你不使用它,你必须为你的工会会员命名。

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

答案 1 :(得分:2)

首先,为您的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;