我有一个结构
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
有问题吗?
答案 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;