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

标签 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 等),你可以默默地接受其他类型的系数

关于c++ - C++中重载*运算符编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25036893/

相关文章:

c++ - 如何正确初始化 boost multi_array 的对象?

c++ - Linux进程ID和线程ID

c++ - 如何在 mac 中使用 make 和 make install

c++ - 我应该链接哪些库来构建 opencv 3.2

c++ - QMutexLocker,QMutex C2530 引用必须初始化

c++ - 如何识别分隔符以及如何将其与路径一起使用 Open Inventor

c++ - 指针运算,按引用传递

c++ - OpenCV:如何修改 OpenCV 的一个组件

c++ - 将 QGraphicsSvgItem 的中心定位在一个位置上。

c++ - 基类和派生类的虚拟插入运算符重载