这个问题是我的错误。 下面描述的代码构建得很好,没有任何问题。
我有这门课。
Vector.h
struct Vector
{
union
{
float elements[4];
struct
{
float x;
float y;
float z;
float w;
};
};
float length();
}
Vector.cpp
float Vector::length()
{
return x; // error: 'x' was not declared in this scope
}
如何访问成员x,y,z,w?
答案 0 :(得分:5)
您需要匿名联盟内的结构实例。我不确切地知道你想要什么,但是这样的事情会起作用:
struct Vector
{
union
{
float elements[4];
struct
{
float x, y, z, w;
}aMember;
};
float length() const
{
return aMember.x;
}
};
答案 1 :(得分:4)
您创建的不是匿名成员,而是匿名类型(本身无用)。您必须创建匿名类型的成员。这涉及你的结构和你的结合。
像这样调整标题:
struct Vector
{
union
{
float elements[4];
struct
{
float x;
float y;
float z;
float w;
} v;
} u;
float length();
};
现在您可以像这样访问您的会员:
u.elements[0] = 0.5f;
if(u.v.x == 0.5f) // this will pass
doStuff();