我有一个Point类(带有整数成员x和y),它有一个成员函数withinBounds
,声明如下:
bool withinBounds(const Point&, const Point&) const;
并定义如下:
bool Point::withinBounds(const Point& TL, const Point& BR) const
{
if(x < TL.getX()) return false;
if(x > BR.getX()) return false;
if(y < TL.getY()) return false;
if(y > BR.getY()) return false;
// Success
return true;
}
然后在另一个文件中,我这样打withinBounds
:
Point pos = currentPlayer->getPosition();
if(pos.withinBounds(topleft, bottomright))
{
// code block
}
这个编译很好,但无法链接。 g ++给了我这个错误:
/home/max/Desktop/Development/YARL/yarl/src/GameData.cpp:61: undefined reference to 'yarl::utility::Point::withinBounds(yarl::utility::Point const&, yarl::utility::Point const&)'
当我使函数不是const时,它链接正常。谁知道原因?链接器错误看起来像是在寻找函数的非const版本,但我不知道它为什么会这样。
答案 0 :(得分:3)
它看起来像在调用文件中,包含的任何标头都给出了withinBounds
的声明具有不正确的声明,非方法版本的方法(请注意,未定义的引用是非const版)。确保您的项目包含目录不包含多个版本的标头。另外,请确保您确实按照预期更改并保存标题。
答案 1 :(得分:0)
我只想在这里添加以供将来的读者使用,因为这在google上是很接近的结果,如果您确信定义正确,请尝试删除所有目标文件(.o),然后重新编译