Visual Studio:错误C2662 - 调用const方法

时间:2011-12-07 12:59:10

标签: c++ const

编辑:愚蠢的错误。不知怎的,我正在使用来自另一个文件夹的源代码文件来编译。从Windows资源管理器中打开文件并查看应有的所有内容,然后意识到在解决方案资源管理器中打开“相同文件”显示了不同的内容。进一步检查显示与我正在尝试构建的项目相关联的文件不是我当前正在编辑的文件。

获得的经验 - 对版本控制要更加小心。

感谢您的评论,他们帮助我向下看正确的线条,并停止敲击键盘寻找拼写错误。

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

我在以下代码中收到多个“错误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或者在代码中错过了一个错字,但是不能为我的生活看到哪里。任何人都可以解释这些集合有何不同以及为什么会抛出错误?

0 个答案:

没有答案