РЕДАКТИРОВАТЬ: Глупая ошибка. Каким-то образом я использовал файлы исходного кода из другой папки, для другого проекта, для компиляции. Открывал файлы из проводника 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 где-то или пропустил опечатку в коде, но не могу за всю жизнь увидеть, где. Кто-нибудь может объяснить, как отличаются наборы и почему выдается ошибка?