2011-09-26 112 views
3

对不起,在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 v1; 

使用第1类型的对象我如何访问float f;上面的代码里面的联合?

我也想看在调试器的监视窗口本浮动F(VS-2010)的值,该怎么做?

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

v1。

+1

你忘了创建一个uif类型的实例吗? 'union uif {...} uif_instance;' – AraK

回答

3

你只定义类范围内的工会,而不是实际创建它的类型的成员变量。所以,你的代码更改为:

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; 
+0

在调试器监视窗口中,当我执行了v1.f时,它给出错误 - 找不到符号f。虽然没有在代码中尝试过。 – goldenmean

3

你从来没有真正定义了工会的任何成员。你只有定义过工会本身。没有 勺子 浮动。

+1

's/float/spoon /' –

+0

@Tomalak:哎呀,我似乎已经双张贴而不是编辑了。 – Puppy

0

你已经在你的班级中定义了你的联合,但是你还没有创建它的一个实例!请尝试:

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

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

1

你只有定义的uniion的类型,你尚未宣布这个联盟类型对象

试试这个:

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 
0

一种选择我不认为已经在这里是一个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; 

请记住,与联盟,它只被定义为读取最后一个成员变量写入。