双向操作员超载

bi-directional operator overloading

本文关键字:超载 操作员      更新时间:2023-10-16

代码

vector.h

friend Vector& operator* (const double &factor, const Vector &v);
friend Vector& operator* (const Vector &v,const double &factor);

vector.cpp

Vector& operator *(const double &factor, Vector &v){
    v.x=v.x*factor;
    v.y=v.y*factor;
    return v;
}
Vector& operator* (const Vector &v,const double &factor){
    return factor * v;
}

,对于某些读取,我会在我的vector.cpp文件上得到错误, Vector& operator* (const Vector &v,const double &factor)-函数

未定义的引用"操作员*

我在做什么错...?

如我的评论中所述,发生错误,因为您的函数声明和定义签名不同。

无论如何,具有免费的常见运算符函数,人们希望获得一个新的Vector实例,而不是获得对传递的引用。

声明/定义操作员函数如下:

friend Vector operator* (const Vector &v,double factor);
friend Vector operator* (double factor, const Vector &v);
Vector operator *(double factor, const Vector &v) {
    Vector result = v;
    result.x=result.x*factor;
    result.y=result.y*factor;
    return result;
}
Vector operator* (const Vector &v,double factor) {
    return factor * v;
}