2011-03-08 25 views
0

我想做一個浮動包裝(這也將在構造函數中做一些神奇的東西)。不正確的值從運算符鑄造參考

但是我發現自己有很奇怪的錯誤。

class Foo { 
public: 
    Wrapper(); 

    operator const float&() const { return m_bar; } 
    operator float&() { return m_bar; } 

    const float& Get() const { return m_bar; } 
    float& Get(){ return m_bar; } 
private: 
    float m_bar; 
}; 

如果我使用Get(),然後我得到正確的值,但如果我只是使用轉換運算符,然後我得到的隨機值。

難道不可能投給會員嗎?

+1

這顯然是,但你如何使用它?任何臨時參與? – 2011-03-08 23:43:37

+0

float bar =(float)foo;爲我工作罰款使用你的課(我只是讓公共m_bar能夠設置它) – SinistraD 2011-03-08 23:47:20

+0

Foo酒吧= 5; Add2dText(SomePos,白色,「Bar:%f」,bar); – 2011-03-08 23:48:47

回答

2

正如你在你的評論中所說的,你正在將類傳遞給可變參數函數(我猜這是可變形的可變參數)。可變參數傳遞不起作用,因爲它傳遞類的地址而不是轉換類型(它不知道它應該在傳遞時將它轉換成什麼)。

如果您需要使用可變參數,則使用Get或顯式強制轉換是唯一的解決方案。

+0

Okey,但我是否也需要對普通的浮動操作符使用顯式投射? – 2011-03-09 00:06:52

+3

不,您需要避免可變參數函數,因爲它們不適用於類對象。 – 2011-03-09 00:14:27