c++中重载*操作符编译错误

Overloading * operator compiling error in c++

本文关键字:编译 错误 操作符 重载 c++      更新时间:2023-10-16

我有这样的代码:

.h文件:

friend Vector2D operator*(float scalar, const Vector2D& v2);

.cpp文件

Vector2D Vector2D::operator*(float scalar, const Vector2D v2)
{
    return Vector2D(v2.m_x * scalar, v2.m_y * scalar);
}

当我尝试编译它时,我得到这个错误:

'Vector2D 'Vector2D::operator*(float, Vector2D)'必须接受0或1个参数

我错过了什么?!!由于

好的,这里是完整的代码:Vector2D.h

#ifndef VECTOR2D_H_INCLUDED
#define VECTOR2D_H_INCLUDED
#include <math.h>
#include <iostream>
class Vector2D
{
public:
    Vector2D(float x = 0, float y = 0): m_x(x), m_y(y) {}
    float getX()
    {
        return m_x;
    }
    float getY()
    {
        return m_y;
    }
    void setX(float x)
    {
        m_x = x;
    }
    void setY(float y)
    {
        m_y = y;
    }
    float length() { return sqrt(m_x * m_x + m_y * m_y); }
    Vector2D operator+(const Vector2D& v2) const;
    Vector2D& operator+=(Vector2D const& a);
    Vector2D operator*(float scalar);//float*Vector2D
    friend Vector2D operator*(float scalar, const Vector2D& v2);
    Vector2D& operator*=(float scalar);
    Vector2D operator-(const Vector2D& v2) const;
    Vector2D& operator-=(Vector2D const& a);
    Vector2D operator/(float scalar);
    Vector2D& operator/=(float scalar);
    void display()
    {
        std::cout << m_x << "," << m_y << std::endl;
    }
private:
    float m_x;
    float m_y;
};

Vector2D.cpp

#include "Vector2D.h"
//+ operator
Vector2D Vector2D::operator+(const Vector2D& v2) const
{
     return Vector2D(m_x + v2.m_x, m_y + v2.m_y);
}
Vector2D& Vector2D::operator+=(Vector2D const& a)
{
     m_x += a.m_x;
     m_y += a.m_y;
     return *this;
}
//- operator
Vector2D Vector2D::operator-(const Vector2D& v2) const
{
    return Vector2D(m_x - v2.m_x, m_y - v2.m_y);
}
Vector2D& Vector2D::operator-=(Vector2D const& a)
{
    m_x -= a.m_x;
    m_y -= a.m_y;
    return *this;
 }
 //* operator
 Vector2D Vector2D::operator*(float scalar)
 {
    return Vector2D(m_x * scalar, m_y * scalar);
 }
 Vector2D Vector2D::operator*(float scalar, const Vector2D& v2)
{
    return Vector2D(v2.m_x * scalar, v2.m_y * scalar);
}

 Vector2D& Vector2D::operator*=(float scalar)
{
     m_x *= scalar;
     m_y *= scalar;
     return *this;
}

 // / operator
 Vector2D Vector2D::operator/(float scalar)
{
    return Vector2D(m_x / scalar, m_y / scalar);
}
Vector2D& Vector2D::operator/=(float scalar)
{
   m_x /= scalar;
   m_y /= scalar;
   return *this;
}

.h文件中,您将函数声明为友元,但是在.cpp中将其定义为成员函数。.cpp声明必须看起来像

Vector2D operator*(float scalar, const Vector2D& v2) // you were also missing &

还可以考虑使operator*成为模板函数(用于类型转换),

template <typename T> 
friend Vector2D operator*(T scalar, const Vector2D& v2);

所以你可以默默地接受其他类型的系数除了float(即intdouble等)