对友元操作符的未定义引用

Undefined reference to friend operator

本文关键字:未定义 引用 操作符 友元      更新时间:2023-10-16

在我的代码中,我有2个类声明在标题"Geometry.h", Vector &Point。在Point类中,我有以下内容:

class Point {
// other stuff
    friend Vector operator-(const Point& lhs, const Point& rhs);
}

Vector定义在"Vector.cpp"&Point在"Point.cpp"中定义。

我的编译器(GCC)抱怨这个,我不知道为什么:

对"Geometry::operator-(Geometry::Point const&, Geometry::Point const&)"的未定义引用|

"Point.cpp"中的函数定义如下:

Vector operator-(const Point& lhs,
             const Point& rhs)
{
    return Vector(lhs.GetX()-rhs.GetX(),lhs.GetY()-rhs.GetY());
}

正如您在讨论中发现的那样,您应该将operator-代码放在名称空间中:

namespace Geometry
{
    ...
    Vector operator-(const Point& lhs, const Point& rhs)
    {
        return Vector(lhs.GetX()-rhs.GetX(),lhs.GetY()-rhs.GetY());
    }
}

还有另一种方法可以将其放入命名空间:

Vector Geometry::operator-(const Point& lhs, const Point& rhs)
{
    return Vector(lhs.GetX()-rhs.GetX(),lhs.GetY()-rhs.GetY());
}