C ++) E0349 ни один оператор не соответствует этим операндам - PullRequest
1 голос
/ 11 апреля 2020

Я хотел сделать скалярную * векторную операцию, например, 5 * (2,3) = (10,15).

e0349 - ни один оператор не соответствует этим операндам после выполнения, как показано ниже.

Но я не знаю, что там не так.

Вот мой код.

#include <iostream>
using namespace std;

class Vector {
public:
    Vector();
    Vector(float x, float y);

    float GetX() const;
    float GetY() const;

    static Vector operator*(const float x, const Vector b); //Scalar * Vector operation

private:
    float x;
    float y;
};

int main() {
    Vector a(2, 3);
    Vector b = 5 * a; //Error's here ! 


    cout << a.GetX() << ", " << a.GetY() << endl;
    cout << b.GetX() << ", " << b.GetY() << endl;
}

Vector::Vector() : x(0), y(0) {}
Vector::Vector(float x, float y) : x(x), y(y) {}

float Vector::GetX() const { return x; }
float Vector::GetY() const { return y; }

Vector Vector::operator*(const float a, const Vector b) {
    return Vector(a * b.x, a * b.y);
}
'''

1 Ответ

1 голос
/ 11 апреля 2020

Вы должны сделать operator* функцией, не являющейся членом, и, поскольку вы получаете доступ к private членам в ней, вы можете пометить ее как friend.

class Vector {
public:
    Vector();
    Vector(float x, float y);

    float GetX() const;
    float GetY() const;

    friend Vector operator*(const float x, const Vector b); //Scalar * Vector operation

private:
    float x;
    float y;
};

...

Vector operator*(const float a, const Vector b) {
    return Vector(a * b.x, a * b.y);
}

* 1007. * LIVE

Или (без этого friend)

class Vector {
public:
    Vector();
    Vector(float x, float y);

    float GetX() const;
    float GetY() const;

private:
    float x;
    float y;
};

Vector operator*(const float x, const Vector b); //Scalar * Vector operation

...

Vector operator*(const float a, const Vector b) {
    return Vector(a * b.GetX(), a * b.GetY());
}

LIVE

...