C++ 重载运算符未定义

C++ 重载运算符未定义,c++,C++,我在看一本书,名叫《游戏物理引擎开发》。在书中,作者创建了一个自定义类型(real),允许他在float和double之间轻松切换,而无需更改整个程序。然后他重载*=操作符以允许向量点积 typedef float real; #define RealSqrt sqrt #define RealPow powf; 编辑:这是向量类 class Vector3D { public: real x; real y; real z;

我在看一本书,名叫《游戏物理引擎开发》。在书中,作者创建了一个自定义类型(real),允许他在float和double之间轻松切换,而无需更改整个程序。然后他重载*=操作符以允许向量点积

typedef float real;
#define RealSqrt sqrt
#define RealPow powf;
编辑:这是向量类

class Vector3D
    {
    public:
        real x;
        real y;
        real z;

    void operator *=(const real value)
          {
            x *= value;
            y *= value;
            z *= value;
          }
    }
我的问题是,当我使用用*=运算符定义的宏(RealPow)时,VisualStudio会突出显示一个错误,告诉我运算符*=对于此类参数是未定义的。(速度是一个向量)

但我不明白的是,当我直接用powf写的时候,没有问题

velocity *= powf(damping, duration);
编辑:它给我的错误是:没有运算符“*=”匹配这些操作数:Vector3D*=float\u cdecl(float\u x,float\u y)

我做错什么了吗

您的定义行

#define RealPow powf;

结尾不应该有额外的分号。

请尝试创建一个分号并显示给我们好吗?当你编辑你的问题以包含MCVE时,也请包含编译器的完整错误输出,完整且未经编辑。使用g++或clang使用
-E
运行编译器,我在Visual Studio中看到的错误是,没有为该运算符的自由函数版本传递足够的参数。x、y和z来自哪里?这应该是一个成员函数吗<代码>错误C2803:'operator*='必须至少有一个类类型的形式参数,而
错误C2805:二进制'operator*='的参数太少
,以及缺少的x、y和z的错误。我只是想知道为什么有';'在“powf”之后??正如@Retired Ninja所说,当您在calss def之外的SDE类(用户定义类型)中定义运算符时,将使用带有一个参数的运算符重载,您应该提供2个参数。
#define RealPow powf;