我正在尝试使用我的子弹列表。 每当我运行更新子弹代码时,它都会给我这个错误:
错误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;
}
答案 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
)。