我班上有简单的运算符重载

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/

10-10 19:23