我在函数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()));
}
};
答案 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成员函数。