C++ 操作员输入的参考值不正确
我正在尝试制作一个float包装器(它在构造函数中也会做一些神奇的事情) 然而,我发现自己犯了一些奇怪的错误C++ 操作员输入的参考值不正确,c++,visual-c++,casting,C++,Visual C++,Casting,我正在尝试制作一个float包装器(它在构造函数中也会做一些神奇的事情) 然而,我发现自己犯了一些奇怪的错误 class Foo { public: Wrapper(); operator const float& () const { return m_bar; } operator float& () { return m_bar; } const float& Get() const { return m_bar; } float&
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(),那么我会得到正确的值,但是如果我只使用cast操作符,那么我会得到随机值
难道不可能强制转换对成员的引用吗?正如您在评论中所说的,您正在将该类传递给vararg函数(我猜通过格式化它就是vararg)。vararg传递不起作用,因为它传递的是类的地址,而不是类型转换(它不知道传递时应该将其转换为什么)
如果需要使用varargs,使用Get或显式cast是唯一的解决方案。显然是这样,但是如何使用它呢?涉及的任何临时变量?浮动条=(浮动)foo;使用你的类对我来说效果很好(我刚刚公开了m_bar以便能够设置它)Foo bar=5;添加2dtext(SomePos,白色,“条:%f”,条)@Raze:试试foobar=5;Add2dText(SomePos,白色,“条:%f”,(浮动)条);-这应该行得通。它使用与printf()相同的语法向屏幕键入文本,但具有2D位置和颜色。好的,但我也需要对普通浮点运算符使用显式转换吗?不,您需要避免使用varargs函数,因为它们不适用于类对象。