c++ - C++) E0349 没有操作符匹配这些操作数
问题描述
我想做像 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());
}
推荐阅读
- python - TypeError:需要一个整数(获取类型str)python数组
- node.js - Heroku 上的 Nuxt 构建不起作用,但在本地运行
- pug - 如何将变量传递给 pug 包含的纯文本文件(.js 文件)
- javascript - 正则表达式获取字符串的一部分
- c# - 如何更改powershell脚本的语言?
- c# - 如何改变disassemply的路径?
- .net - 为什么 blazor HeadOutlet 在 App 之后渲染
- javascript - 如何导航到另一个功能组件并在 ReactJs 中传递一个值
- node.js - 将功能从本地服务器转移到 Firebase 云功能
- python - 使用 aws-iot-device-sdk-python-v2 发布到设备影子的问题