Visual Studio: ошибка C2662 - вызов метода const - PullRequest
0 голосов
/ 07 декабря 2011

РЕДАКТИРОВАТЬ: Глупая ошибка. Каким-то образом я использовал файлы исходного кода из другой папки, для другого проекта, для компиляции. Открывал файлы из проводника Windows и видел все константы в том виде, в каком они должны быть, а затем понял, что открытие «одинаковых файлов» из обозревателя решений показало различное содержимое. Дальнейшая проверка показала, что файлы, связанные с проектом, который я пытался создать, не были файлами, которые я редактировал в настоящее время.

Извлеченный урок - будьте осторожнее с контролем версий.

Спасибо за комментарии, они помогли мне посмотреть правильные строки и перестали стучать головой по клавиатуре в поисках опечатки.

=============================================== =========

Я получаю несколько ошибок "error C2662" в следующем коде (позиции показаны в комментариях):

XYVector Rocket::avoidRocketsAndPlanets(float distance, const std::set<Rocket>& otherRockets, const std::set<Planet>& planets) const
{
XYVector c = XYVector();

for (std::set<Rocket>::const_iterator it = otherRockets.begin(); it != otherRockets.end(); it++)
{
    if ((it->getPos() - pos).mod() < distance)
    {
        c -= (it->getPos() - pos);
    }
}

for (std::set<Planet>::const_iterator it = planets.begin(); it != planets.end(); it++)
{
    XYVector planetPos = it->getPos();
    // ^ error C2662: 'Planet::getPos' : cannot convert 'this' pointer from 'const Planet' to 'Planet &'
    if ((planetPos - pos).mod() < (distance + it->getRadius()))
    // ^ error C2662: 'Planet::getRadius' : cannot convert 'this' pointer from 'const Planet' to 'Planet &'
    {
        c -= (it->getPos() - pos);
        // ^ error C2662: 'Planet::getPos' : cannot convert 'this' pointer from 'const Planet' to 'Planet &'
    }
}

return c;
}

Я не понимаю, почему я получаю эти ошибки, потому что все рассматриваемые методы объявлены как const. На самом деле они объявлены и определены одинаково в Rocket и Planet, но те же вызовы Rocket не дают ошибок.

В Rocket.h и Planet.h:

XYVector getPos() const;
double getRadius() const;

И реализации в Planet.cpp:

XYVector Planet::getPos() const
{
    return pos;
}
...
double Planet::getRadius() const
{
    return 4 * sqrt(mass);
}

Я чувствую, что я, должно быть, забыл вставить const где-то или пропустил опечатку в коде, но не могу за всю жизнь увидеть, где. Кто-нибудь может объяснить, как отличаются наборы и почему выдается ошибка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...