访问类内部的联合中的变量

Accessing a variable in a union which is inside a class

本文关键字:变量 内部 访问      更新时间:2023-10-16

对于c++中幼稚的问题感到抱歉。对于下面的代码,有一个类,其中有一个具有两个变量的联合声明。如何使用下面代码中的类对象访问联合中的变量:

class my
{
public:
//class member functions, and oeprator overloaded functions
 public:
    union uif
    {
    unsigned int    i;
    float       f;
    };
private:
//some class specific variables.
};

如果存在类型为my的对象,如

my v1;

在函数后面

使用v1如何访问浮点数f;代码中的联合内部?

我还想在调试器(VS-2010)的监视窗口中观看此浮动f的值,如何做到这一点?

我试过v1.uif。f,在监视窗口中给出错误:错误操作符需要类结构或联合。

v1。

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

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. 
}; 
现在可以在联合成员中设置成员变量,如下所示:
my m;
m.value.i=57;
// ...
m.value.f=123.45f;

您从未实际定义该联合的任何成员。你只定义了联盟本身。没有勺子浮动

您只定义了联合的类型,您还没有声明该联合的类型对象

试试这个:

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

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

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;

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

您已经在类中定义了联合,但是还没有创建它的实例!试一试:

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

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