访问类中的联合中的变量

时间:2011-09-26 16:17:37

标签: c++ class

抱歉C ++中的天真问题。对于下面的代码,有一个类,其中有一个具有两个变量的联合声明。如何使用下面的代码中的类对象访问union中的变量:

class my
{

public:
//class member functions, and oeprator overloaded functions

 public:

    union uif
    {
    unsigned int    i;
    float       f;
    };

private:
//some class specific variables.

};

如果有类型的对象我定义为

my v1;

稍后在函数中

使用v1如何访问float f;在代码里面的联合内部?

我也希望在调试器(VS-2010)的监视窗口中观察此浮点数f的值,该怎么做?

我尝试了v1.uif.f,这在监视窗口中给出了错误:错误oeprator需要类结构或联合。

V1。

5 个答案:

答案 0 :(得分:4)

您只是在类的范围内定义联合,而不是实际创建其类型的成员变量。因此,请将代码更改为:

class my 
{ 

public: 
//class member functions, and oeprator (sic) overloaded functions 

 public: 

    union uif 
    { 
    unsigned int    i; 
    float       f; 
    } value; 

private: 
//some class specific variables. 

}; 

现在您可以在union成员中设置成员变量,如下所示:

my m;

m.value.i=57;
// ...
m.value.f=123.45f;

答案 1 :(得分:4)

你从未真正定义过该联盟的任何成员。你只定义了联盟本身。没有 spoon 浮动。

答案 2 :(得分:2)

您只定义了联合的类型,但您尚未声明此联合类型的对象

试试这个:

class my
{
public:
    union uif
    {
      unsigned int    i;
      float       f;
    };

    uif obj;  //declare an object of type uif
};

my v;
v.obj.f = 10.0; //access the union member

答案 3 :(得分:1)

我在这里没有看到的一个选项是Anonymous Union的选项,这是您没有类型实例化的地方。像这样:

class my 
{ 
public: 
//class member functions, and oeprator (sic) overloaded functions 

    function(int new_i) { i = new_i;}
    function(float new_f) { f = new_f;}
 public: 

    union /* uif */
    { 
    unsigned int    i; 
    float       f; 
    }; 

private: 
//some class specific variables. 

}; 

my m;
m.i=57;
m.f=123.45f;

请记住,对于工会,它只被定义为从写入的最后一个成员变量中读取。

答案 4 :(得分:0)

您已经在班级中定义了自己的联盟​​,但是您还没有创建它的实例!尝试:

union uif
{
unsigned int    i;
float       f;
} myUif;

然后使用v1.myUif.f(或i)。