3

我遇到了一个名为 PolyBoolean 的库。这基本上与我的问题无关。在库中有一个奇怪的结构类型如下:

struct VNODE2
{
    VNODE2 * next;
    VNODE2 * prev;
    UINT32   Flags;
    union
    {
        VECT2 p;
        GRID2 g;
    };
}; 

GRID2 定义为:

struct GRID2
{
    INT32 x, y;
};

GRID2定义一个点,是点的VECT2另一种表示,类似于GRID2并且VNODE2node。假设我有一个VNODE2结构变量v2,我怎样才能得到xand yin的值g

我试过v2.g.x了,vs2008编译器给了我一个错误:"error C2059: syntax error" 任何帮助将不胜感激。

4

2 回答 2

1

这是匿名联合,因此您可以照原样引用成员,请参阅: 在此处输入图像描述

确保您在结构之前声明了 GRID2。这是工作示例。您还可以命名您的联合以在您的类中创建实例。

typedef int UINT32;
typedef int VECT2;
typedef int INT32;

struct GRID2
{
    INT32 x, y;
};

struct VNODE2
{
    VNODE2 * next;
    VNODE2 * prev;
    UINT32   Flags;
    union
    {
        VECT2 p;
        GRID2 g;
    };
}; 

int main(int argc, char** argv) {

    VNODE2 v;
    v.g.x=1;
    return 0;
}

如果您希望您的工会有名字,请按以下方式操作:

struct GRID2
{
    INT32 x, y;
};

struct VNODE2
{
    VNODE2 * next;
    VNODE2 * prev;
    UINT32   Flags;
    union
    {
        VECT2 p;
        GRID2 g;
    }myNamedUnion;
}; 

int main(int argc, char** argv) {

    VNODE2 v;
    v.myNamedUnion.g.x=1;
    return 0;
}
于 2013-05-03T15:01:40.543 回答
0

v2.p 和 v2.g 应该可以工作。

struct VNODE2
{
  VNODE2 * next;
  VNODE2 * prev;
  union
  {
    int p;
    float g;
  };
}; 

int main()
{
  VNODE2 bla;
  bla.p = 17;
  std::cout << bla.p << std::endl;
  bla.g = 18;
  std::cout << bla.g << std::endl;
}

输出:

17

18

于 2013-05-03T14:54:52.050 回答