我班上有简单的运算符重载
class Vec2
{
public:
Vec2(float x1,float y1)
{
x = x1;
y = y1;
}
float x;
float y;
};
class FOO {
private:
friend Vec2 operator*(const Vec2 &point1, const Vec2 &point2)
{
return Vec2(point1.x * point2.x, point1.y * point2.y);
}
Vec2 mul(Vec2 p);
};
Vec2 FOO::mul(Vec2 p)
{
Vec2 point = p * Vec2(1,-1);
return point;
}
但是这种乘法给了我这个错误:
operator*
没有运算符匹配这些操作数问题是我无法更改Vec2类,因此我需要全局运算符重载
最佳答案
operator*
定义不应在class FOO
内。将其放在任何类定义之外:
inline Vec2 operator*(const Vec2 &point1, const Vec2 &point2)
{
return Vec2(point1.x * point2.x, point1.y * point2.y);
}
如果在头文件中,则需要
inline
关键字。然后,您可以在FOO
以及其他任何位置使用运算符。限制操作符只能在
FOO
方法内使用。函数可见性不起作用。您可以做的最接近的事情是只在某些具有使用点的operator*
文件中声明.cpp
重载,并将其标记为static
或匿名命名空间。关于c++ - c++使用“*”运算符没有运算符匹配这些操作数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39565922/