【发布时间】:2013-01-17 03:18:08
【问题描述】:
我对 C++ 还是很陌生,所以如果有一个简单的答案,我提前道歉。我正在尝试使用重载运算符。这是该运算符的签名:
const Vector3D operator/(const Vector3D& lhs, const double rhs)
这是我尝试使用它的方法:
OrthonormalBasis::OrthonormalBasis(const Vector3D &a)
{
Vector3D t;
w = a / a.length();
t = getCollinearVector(w);
//More code goes here
}
当我尝试编译时,g++ 返回以下错误:
/file/path/orthonormalBasis.cpp:8: undefined reference to
`operator/(Vector3D const&, double)'
collect2: ld returned 1 exit status
操作符是在 Vector3D.cpp 中定义的,所以我确实有定义。
【问题讨论】:
-
a.length()不是double,因此操作员的签名不匹配。 -
@vonbrand:如果是这样的话,他会得到编译器错误,而不是链接错误。
-
@Omnifarious:那是因为大多数文本在涵盖工具链方面什么都不做,只关注代码。你可以把我算在这些人中。 7 年后,我仍然在这个过程中挣扎,至少在弄清楚如何将其他库链接到我的程序中时是如此。
-
老实说,我花了很长时间才了解链接。是的,我从一开始就使用了 IDE(作为课程的一部分)。在迁移到 IDE 之前完成所有基本的手动编译和链接会更有益。
标签: c++ linker operator-overloading constants pass-by-reference