このコードはセグメンテーション違反であり、その理由がわかりません。gdb を使用すると、関数の最後 (中かっこ) でセグメンテーション違反が発生します。そのため、実際に何が起こっているかについて多くの情報が得られるわけではありません。これがコードです。必要に応じて追加情報を提供します。
typedef std::list<Ground> l_Ground;
void Player::y_collisions(l_Ground grounds) {
for (l_Ground::const_iterator ent = grounds.begin(); ent != grounds.end(); ent++) {
if (getGlobalBounds().intersects(ent->getGlobalBounds())) {
in_air = false;
velocity -= gravity;
}
}
}
編集: よく調べてみると、おそらくその for ループの最後でセグメンテーション違反が発生しています。for ループの書き方のせいで、これはまだあまり意味がありません。リストの最後を超えてはなりません。
EDIT2:これは、以下の回答のために機能します。
typedef std::list<Ground> l_Ground;
void Player::y_collisions(const l_Ground& grounds) {
for (l_Ground::const_iterator ent = grounds.begin(); ent != grounds.end(); ent++) {
if (getGlobalBounds().intersects(ent->getGlobalBounds())) {
in_air = false;
velocity -= gravity;
}
}
}