C 结构错误中的并集
我有以下结构:C 结构错误中的并集,c,struct,unions,C,Struct,Unions,我有以下结构: struct type1 { struct type2 *node; union element { struct type3 *e; int val; }; }; 初始化指向type1实例的指针*f并执行以下操作时: f.element->e甚至只是f.element,我得到: error: request for member ‘element’ in something not a structure or unio
struct type1 {
struct type2 *node;
union element {
struct type3 *e;
int val;
};
};
初始化指向type1
实例的指针*f
并执行以下操作时:
f.element->e
甚至只是f.element
,我得到:
error: request for member ‘element’ in something not a structure or union
我在这里监督什么?如果f是指针,那么您可以使用f->element或(*f).element访问“element” 更新:刚刚看到“element”是联合名称,而不是结构的成员。 你可以试试
union element {
struct type3 *e;
int val;
} element;
所以最后的结构是这样的:
struct type1 {
struct type2 *node;
union element {
struct type3 *e;
int val;
} element;
};
现在您可以通过type1*f访问如下元素成员:
struct type1 *f;
// assign f somewhere
f->element.val;
element
是工会的名称,而不是type1
成员的名称。您必须为联合元素指定一个名称:
struct type1 {
struct type2 *node;
union element {
struct type3 *e;
int val;
} x;
};
然后,您可以通过以下方式访问它:
struct type1 *f;
f->x.e
你能出示
f
的声明吗?也许你的意思是f->element.e
?element
是联合标签,而不是成员名。尝试使用struct{…union元素{…}elem;}
和f.elem
@Darksky您的struct
成员需要一个名称才能访问它。名称在类型后给出<代码>结构类型1{…;联合{…}元素;}将创建一个类型为(未标记)union{…}
@Darksky的成员元素
:在C 1999和更早版本中,在union声明的末尾添加一个名称不仅仅是给它一个与其类型不同的名称。它给它起了个名字。没有这个,它就没有名字;封闭结构中没有对象和成员。如果没有这些,它只是一个类型的声明,而不是一个成员的声明。@DanielFischer:C 2011引入了匿名联合和结构,在这种情况下,联合不需要名称。请阅读问题。这就是我所做的,这就是我得到的错误。@Darksky不。根据你的问题,你做了f.element
,而不是f->element
。不,我两者都做了。引用:f.element->e,甚至只是f.element,我得到了
@Darkskyf.element->e
或f.element
与f->element
不一样f.
指针始终是错误的*f
(但无论如何,在编辑之前,union的问题仍然存在)。也许你应该为你的f
调用malloc内存?f
必须以某种方式初始化,是的。这里可能有一些C版本的问题。C 2011引入了匿名结构和联合,在这种情况下,f->e
将与原始声明一起使用。但是,如果Darksky使用的是早期版本的C,则必须按照此答案中所示修改union声明。@EricPostpischil正确,但即使如此,也不会说:f->element.e
f已在malloc
中初始化。这就解决了问题。谢谢