对朋友操作员的未定义引用

时间:2014-08-21 11:58:10

标签: c++ friend undefined-reference

在我的代码中,我在标题“Geometry.h”中声明了2个类,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());
}

1 个答案:

答案 0 :(得分:2)

正如您在讨论中发现的那样,您应该将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());
}