C++) E0349 没有运算符匹配这些操作数
C++) E0349 no operator matches these operands occured
我想进行标量 * 向量运算,例如 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);
}
或者(没有成功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());
}
我想进行标量 * 向量运算,例如 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);
}
或者(没有成功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());
}