C 匿名联合重新陈述错误

C++ anonymous union redeclaration error

本文关键字:新陈述 错误      更新时间:2023-10-16

我想创建一个可用于存储3D坐标或线性方程的结构。这是代码:

struct myStruct {
    union {
        // coordinates (3d)
        struct {
            int x,y,z;
        };
        // linear equation (ax+b)
        struct {
            int a,b,x;
        };
    };
};

我会收到以下错误:

error: redeclaration of ‘int myStruct::<anonymous union>::<anonymous struct>::x’

我在Linux Mint 18.04,G (5.4.0(,用-std = C 11。

编译

我理解这个问题。但是有很少的问题。

  1. 我看到了在Windows上工作的内容,为什么?
  2. 实施它的最佳方法是什么,因此它在两者(Linux/Win(上都很好地工作?

只给他们名字。这应该没问题:

struct myStruct {
    union {
        struct coordinates { int x,y,z; };
        struct linear_equation { int a,b,x; };
        coordinates coord;
        linear_equation lin_eq;
    };
};

我还允许自己加入工会。但是,这两个结构具有相同类型和数量的成员,因此,恕我直言,进入联合的麻烦是值得怀疑的。

只是为了补充用户463035818的答案。您可以直接宣布成员,例如:

来简化工会。
struct myStruct {
    union {
        // coordinates (3d)
        struct {
            int x,y,z;
        } coord;
        // linear equation (ax+b)
        struct {
            int a,b,x;
        } lin_eq;
    };
};