c++ avertissement: valeur de l'énumération n'est pas traité de switch [-Wswitch]

Je suis en train de compiler code suivant sans mise en garde:

    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;
}

cependant, je reçois beaucoup de mises en garde:

/home/bluszcz/private/repo/deerportal/game.cpp:444: warning: enumeration value 'LostFocus' not handled in switch [-Wswitch]

Qui, à mon il n'est pas un problème, depuis que je suis n'a pas besoin de la manipulation de tous types d'événements.

Ajoutant

default:
break;

à mon code supprime les mises en garde, cependant est-il une meilleure façon de résoudre ce problème?

Je pense que default est encore la meilleure façon, vous pouvez toujours traiter chaque cas séparément si vous le souhaitez.
Vous devriez toujours avoir un cas de défaut dans le cas où il n'y a pas de match.
Personnellement, je crois que cet avertissement (en collaboration avec la réorganisation de membre d'initialisation dans le constructeur) est l'un des moins utile dans gcc. J'avais des tonnes de cas où toutes les valeurs de l'enum avait un véritable cas de commutateurs et de faire un vide par défaut juste pour pacifier le compilateur est dénué de sens, la syntaxe de bruit. C'est pourquoi cet avertissement, c'est celui que je suis OK avec la suppression de.
Je suis en désaccord. Bien sûr, il ya des cas où un default: cas est appropriée. Mais dans le cas général, vous devriez éviter et de traiter tous de manière explicite les valeurs de sorte que le compilateur peut vous avertir lorsque vous avez oublié de s'occuper d'une affaire.

OriginalL'auteur bluszcz | 2016-05-16