Union in Struct Error

2019-03-03 13:58发布

I have the following struct:

struct type1 {
    struct type2 *node;
    union element {
        struct type3 *e;
        int val;
    };
};

When initialising a pointer *f that points to an instance of type1 and doing something like: f.element->e or even just f.element, I get:

error: request for member ‘element’ in something not a structure or union

What am I overseeing here?

标签: c struct unions
2条回答
你好瞎i
2楼-- · 2019-03-03 14:12

element is the name of the union, not the name of a member of type1. You must give union element a name:

struct type1 {
struct type2 *node;
    union element {
        struct type3 *e;
        int val;
    } x;
};

then you can access it as:

struct type1 *f;
f->x.e
查看更多
Viruses.
3楼-- · 2019-03-03 14:15

If f is a pointer, then you may access "element" using f->element, or (*f).element

Update: just saw that "element" is the union name, not a member of the struct. You may try

union element {
    struct type3 *e;
    int val;
} element;

So the final struct would be like this:

struct type1 {
    struct type2 *node;
    union element {
        struct type3 *e;
        int val;
    } element;
};

And now you can access element members like this, through a type1 *f:

struct type1 *f;

// assign f somewhere

f->element.val;
查看更多
登录 后发表回答