Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 操作员输入的参考值不正确_C++_Visual C++_Casting - Fatal编程技术网

C++ 操作员输入的参考值不正确

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&

我正在尝试制作一个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函数,因为它们不适用于类对象。