如何在C ++中访问匿名union / struct成员?

时间:2011-02-05 11:13:34

标签: c++ anonymous-types

这个问题是我的错误。 下面描述的代码构建得很好,没有任何问题。


我有这门课。

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?

2 个答案:

答案 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();