2011-03-08 10 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; 
}; 

私がゲット()を使用する場合、私は、正しい値を取得するが、私はちょうどキャスト演算子を使用している場合、私はランダムな値を取得します。

メンバーへの参照をキャストできませんか?

+1

これは明らかですが、どのように使用しますか?関連するすべての一時的なものは? –

+0

float bar =(float)foo;あなたのクラスを使用して私のためにうまくいく(私はm_barをpublicにしてそれを設定できるようにした) – SinistraD

+0

Foo bar = 5; Add2dText(SomePos、白、 "Bar:%f"、bar); –

答えて

2

あなたのコメントで述べたように、クラスをvararg関数に渡しています(私はformatingによってvarargだと思います)。クラスのアドレスを渡し、キャスト型ではないため(渡すときにキャストする必要があるかどうかはわかりません)、varargの引き渡しは機能しません。

varargsを使用する必要がある場合は、Getまたは明示的キャストを使用することが唯一の解決策です。

+0

Okeyですが、通常の浮動小数点演算子にも明示的なキャストを使用する必要がありますか? –

+3

いいえ、クラスオブジェクトでは機能しないので、varargs関数は避ける必要があります。 –

関連する問題