компоновщик g ++ не может найти функцию-член const - PullRequest
0 голосов
/ 11 июня 2010

У меня есть класс 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&)'

Когда я делаю функцию не константной, она прекрасно связывается. Кто-нибудь знает причину почему? Ошибка компоновщика выглядит так, будто он ищет неконстантную версию функции, но я не знаю, почему это так.

1 Ответ

3 голосов
/ 11 июня 2010

Похоже, что в вызывающем файле любой заголовок для объявления withinBounds имеет неверное объявление неконстантной версии метода (обратите внимание, что неопределенная ссылка относится к неконстантной версии ). Убедитесь, что в вашем проекте есть каталоги, а не несколько версий заголовка. Также убедитесь, что вы действительно изменили и сохраните заголовок, как вы и планировали.

...