임 꽤 여기에 붙어 있습니다. 나는 지난 2 일 동안 노력하고 인터넷 검색을하고 있지만 그것을 이해할 수 없다. Player라는 클래스와 Player를 상속받은 Enemy라는 클래스가 있습니다. Player에 내 총알과 루프 물마루 좌표를 저장하는 목록이 있습니다. 나는 Player에 빌드 된 Enemy의 충돌을 확인하기 위해 동일한 목록에 액세스하고 루프하는 여유 시간표를 시도하지만 루프에도 들어 가지 않습니다. 어떻게 든 비어있는 것 같지만 왜?C++ 목록 루핑
struct structShoot
{
float x;
float y;
};
class Player
{
private:
blablabla
protected:
list<structShoot>::iterator it;
list<structShoot> shoot_list;
structShoot test;
public:
void render(SDL_Surface* dest);
};
void Player::render(SDL_Surface* dest)
{
//Works fine, see the other loop down below
for(it = shoot_list.begin(); it != shoot_list.end();)
{
shoot.moveSet(it->x, it->y);
shoot.draw(dest);
it->y--;
if((it->y) < -25)
{
it = shoot_list.erase(it);
}
else
{
it++;
}
}
}
class Enemy : protected Player
{
public:
void render(SDL_Surface* dest);
};
void Enemy::render(SDL_Surface* dest)
{
SDL_Rect a, b;
//Does not enter loop!? Ever. Why?
for(it = shoot_list.begin(); it != shoot_list.end();)
{
SDL_Quit();
a.x = enemy.getX();
a.y = enemy.getY();
a.w = enemy.getWidth();
a.h = enemy.getHeight();
b.x = it->x;
b.y = it->y;
b.w = 10;
b.h = 19;
it->y--;
if (collision(a, b) == true)
{
SDL_Quit();
}
if(it->y < -25)
{
it = shoot_list.erase(it);
}
else
{
it++;
}
}
}
아마도 첫 번째 루프에서 전체 목록을 지운 것일 수 있습니다. 따라서 두 번째 루프는 아무 관계가 없습니까? –
이것을 디버거에서 실행 시키거나 프린트 문을 추가해 보았습니까? 예를 들어,'! shoot_list.empty()'를 확인 했습니까? –
'Enemy' 객체의 일부 유형 다형성 캐스트를'Player' 포인터에 전달하지 않았습니까? 이 경우'render()'가 가상 함수가 아니기 때문에'(* my_player) .render()'포인터를 호출하면'Enemy :: render()'. – Jason