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