C ++匿名联合重新声明错误

时间:2018-04-24 09:20:21

标签: c++ c++11 g++

我想创建一个可用于存储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)上运行良好?

2 个答案:

答案 0 :(得分:1)

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

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

我也允许自己在工会中添加一些成员。但是,这两个结构具有相同类型和数量的成员,因此使用联盟的麻烦是值得怀疑的。

答案 1 :(得分:1)

只是为了补充user463035818的答案。您可以通过直接声明成员来简化您的联合,例如:

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