没有运算符“*”匹配这些操作数...操作数类型是:const Vec2 * float

时间:2017-03-17 19:23:44

标签: c++ class operator-overloading

我在函数Project中收到错误“Error (active) E0349 no operator "*" matches these operands... operand types are: const Vec2 * float”。我已经定义了运算符*,看起来参数匹配......我没有看到我做错了...

class Vec2
{
public:
    float x;
    float y;

    Vec2 operator*(const float &right) {
        Vec2 result;
        result.x = x * right;
        result.y = y * right;
        return result;
    }    

    float MagnitudeSq() const
    {
        return sqrt(x * x + y * y);
    }

    float DistanceSq(const Vec2& v2)
    {
        return pow((v2.x - x), 2) + pow((v2.y - y), 2);
    }

    float Dot(const Vec2& v2)
    {
        return x*v2.x + y*v2.y;
    }

    Vec2 Project(const Vec2& v2)
    {
        *this = v2 * std::fmax(0, std::fmin(1, (*this).Dot(v2) / this->MagnitudeSq()));
    }
};

2 个答案:

答案 0 :(得分:3)

您应该声明operator * vec2作为const对象的行为。

Vec2 operator*(const float &right) const { 
//                                ^^^^^^

这是因为在方法Vec2 Project(const Vec2& v2)中你使用了v2上的运算符*,你在原型中声明了const。

答案 1 :(得分:3)

更改行

Vec2 operator*(const float &right) {

Vec2 operator*(const float &right) const {

它应该有用。

您正试图在const对象上执行非const成员函数。