在我的代码中,我有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());
}