结构错误中的联合

时间:2012-10-23 19:32:42

标签: c struct unions

我有以下结构:

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

初始化指向*f实例的指针type1并执行以下操作时: f.element->e或者只是f.element,我得到:

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

我在这里监督什么?

2 个答案:

答案 0 :(得分:3)

element是联合的名称,而不是type1成员的名称。您必须提供union element名称:

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

然后你可以访问它:

struct type1 *f;
f->x.e

答案 1 :(得分:-1)

如果f是指针,那么您可以使用f->元素或(* f).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;