无法将'this'指针从'const Bullet'转换为'Bullet&'

时间:2013-11-06 18:30:16

标签: c++ list

我正在尝试使用我的子弹列表。 每当我运行更新子弹代码时,它都会给我这个错误:

错误1错误C2662:'Bullet :: detectCollision':无法将'this'指针从'const Bullet'转换为'Bullet&'

我的清单:

std::list<Bullet> bullet_list;

我的更新代码:

std::list<Bullet>::const_iterator cIter;
    for ( cIter = bullet_list.begin( ); cIter != bullet_list.end( ); cIter++ )
    {
        if((*cIter).detectCollision(monster.position,monster.getHeight(),monster.getWidth()))
        {
//Do stuff here
        }
        if ((*cIter).detectCollision(boss.getPosition(),boss.getHeight(),boss.getWidth()))
        {
//Do stuff here
        }
    }

我的检测碰撞代码:

bool Bullet::detectCollision(Vector objTwo,int heightT,int widthT)
{
if(position.getVectorX() >= objTwo.getVectorX() - (widthT/2) && position.getVectorX() <= objTwo.getVectorX() + (widthT/2)
    && position.getVectorY() >= objTwo.getVectorY() - (widthT/2)&& position.getVectorY() <= objTwo.getVectorY() + (heightT/2) && alive)
{
    return false;
}
return true;
}

3 个答案:

答案 0 :(得分:4)

您需要将detectCollision声明为const

bool Bullet::detectCollision(Vector objTwo,int heightT,int widthT) const

如果不这样做,它会尝试进行转换,因此可以在const引用上调用非const函数,但不允许这样做。

答案 1 :(得分:1)

您正在使用const_iterator但尝试访问非const成员函数。如果它可以是const成员函数,可以使用iterator而不是teh const_iterator,或者将函数声明为const。

答案 2 :(得分:0)

const_iter不允许更改它指向的值,因此当您调用detectCollision时,您需要承诺编译器,您也不会更改这些值(使函数成为可能) const)。