2011-09-26 113 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; 

請記住,與聯盟,它只被定義爲讀取最後一個成員變量寫入。