在我的代码中,我在标题“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());
}
答案 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());
}