2011-03-08 6 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

Это очевидно, но как вы его используете? Любые задействованные временные лица? –

+0

float bar = (float) foo; работает для меня отлично, используя ваш класс (я только что сделал m_bar public, чтобы иметь возможность установить его) – SinistraD

+0

Foo bar = 5; Add2dText (SomePos, white, "Bar:% f", bar); –

ответ

2

Как вы указали в своем комментарии, вы передаете класс функции vararg (я думаю, что это vararg по формированию). Передача vararg не работает, потому что она передает адрес класса, а не тип отбрасывания (он не знает, к чему его следует передавать при передаче).

Использование Get или явное преобразование - единственное решение, если вам нужно использовать varargs.

+0

Okey, но мне нужно также использовать явное литье для обычных операторов float? –

+3

Нет, вам нужно избегать функций varargs, потому что они не работают с объектами класса. –

Смежные вопросы