抱歉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。
答案 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)。