g ++链接器找不到const成员函数

时间:2010-06-10 21:05:08

标签: c++ g++ const linker-errors

我有一个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版本,但我不知道它为什么会这样。

2 个答案:

答案 0 :(得分:3)

它看起来像在调用文件中,包含的任何标头都给出了withinBounds的声明具有不正确的声明,非方法版本的方法(请注意,未定义的引用是非const版)。确保您的项目包含目录不包含多个版本的标头。另外,请确保您确实按照预期更改并保存标题。

答案 1 :(得分:0)

我只想在这里添加以供将来的读者使用,因为这在google上是很接近的结果,如果您确信定义正确,请尝试删除所有目标文件(.o),然后重新编译