警告なしで次のコードをコンパイルしようとしています:
while (window.pollEvent(event))
{
switch (event.type) {
case sf::Event::Closed:
window.close(); break;
case sf::Event::KeyPressed:
if(event.key.code == sf::Keyboard::Escape )
window.close();
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Space ) )
particleSystem.fuel( 200/* * window.getFrameTime() */);
if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) )
particleSystem.setPosition( --xpos, ypos );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) )
particleSystem.setPosition( ++xpos, ypos );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) )
particleSystem.setPosition( xpos, --ypos );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::S ) )
particleSystem.setPosition( xpos, ++ypos );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
particleSystem.setGravity( --xgrv * 0.1f, ygrv * 0.1f);
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
particleSystem.setGravity( ++xgrv * 0.1f, ygrv * 0.1f );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) )
particleSystem.setGravity( xgrv * 0.1f, --ygrv * 0.1f );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) )
particleSystem.setGravity( xgrv * 0.1f, ++ygrv * 0.1f );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::G ) )
particleSystem.setGravity( 0.0f, 0.0f );
if( sf::Keyboard::isKeyPressed( sf::Keyboard::P ) )
particleSystem.setPosition( 320.0f, 240.0f );
break;
}
ただし、多くの警告が表示されます。
/home/bluszcz/private/repo/deerportal/game.cpp:444: warning: enumeration value 'LostFocus' not handled in switch [-Wswitch]
私の場合、これは問題ではありません。すべてのタイプのイベントを処理する必要がないからです。
追加中
default:
break;
私のコードに警告を削除しますが、この問題を解決する最良の方法ですか?
それはあなたが達成しようとしているものに依存します。支配規則は
明示的にする方が良いです。
ケースを省略すると、単に忘れているように見えます。明示的であることは、コードの後続の読者に、特定のイベントに対して何もしない意図であることを保証します。
その観点から、いくつかのオプションがあります。
default:
break;
これにより、警告が抑制され、ここで他のイベントタイプを処理するつもりがないことが明確になります。
各イベントタイプをリストし、その後にbreak
を続けます。これも明示的であり、イベントタイプを追加した場合、コンパイラはswitch
が不完全であることを再度警告します。これは、多くのswitchステートメントがあり、enum値が追加されたときに新しい操作を行うために一部を変更する必要がある場合に役立ちます。
ここで一連のif
ステートメントを使用することはお勧めしません。 switch
はより明確で、入力の量を減らし、(お分かりのように)省略した場合により良いコンパイラ警告を生成できます。