繁体   English   中英

C ++中的重载*运算符编译错误

[英]Overloading * operator compiling error in c++

我有以下代码:

在.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)'必须采用零或一个参数

我错过了什么?!! 谢谢

好的,这里是完整代码: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文件中,您将函数声明为Friend,但是在.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等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM