c++ - C++)E0349没有运算符匹配这些操作数

标签 c++ vector overloading operator-keyword

我想进行标量* vector 运算,例如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);
}
'''

最佳答案

您应该在此处将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);
}

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

关于c++ - C++)E0349没有运算符匹配这些操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61152126/

相关文章:

c++ - RPN 计算器无法正确执行计算

c++ - 将数组传递给模板函数

c++ - 将多维 vector (矩阵)传递给 C++ 中的函数

c++ - 对象中 vector 中的 push_back

c++ - 具有相同名称的继承函数如何被视为重载函数?

c++ - 重载 C++ 类型以处理自定义类

c# - C# 4 中的重载分辨率和可选参数

c++ - 同时运行两个程序 C/C++

c++ - Windbg,如何读取 !locks 输出?

c++ - 不可变 vector 的不可变子 vector