我遇到了一个名为PolyBoolean的库。这基本上与我的问题无关。 在库中有一个奇怪的结构类型如下:
struct VNODE2
{
VNODE2 * next;
VNODE2 * prev;
UINT32 Flags;
union
{
VECT2 p;
GRID2 g;
};
};
和GRID2定义为:
struct GRID2
{
INT32 x, y;
};
GRID2
定义一个点,VECT2
是与GRID2
类似的点的另一种表示,VNODE2
是node
。假设我有VNODE2
结构变量v2
,如何在x
中获取y
和g
的值?
我试过v2.g.x
,vs2008编译器给了我一个错误:"error C2059: syntax error"
任何帮助都会非常感激。
答案 0 :(得分: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;
}
答案 1 :(得分: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