Type enum dans une methode ( break ?)

Type enum dans une methode ( break ?)

par Elsa Nina Dupuis,
Number of replies: 3

Bonjour,

Je rencontre un problème dans certaines de mes methodes car j'ai eu recours a un enum mon_enum={x,y}

Ma methode a la structure suivante:

type_non_void f (mon_enum choix)
{

switch{
case x: {return qqc;}
case y: {return qqc;}

}

Ainsi le compilateur refuse de compiler et affiche:

"warning: control reaches end of non-void function [-Wreturn-type]"

Que dois je faire dans ce cas? Dois je ajouter des "break" (ce qui nous a été fortement déconseillé tout au long du semestre 1) ? 

Ceci est pour le code du projet et je ne voudrais donc pas être pénalisée pour mauvaise programmation...

In reply to Elsa Nina Dupuis

Re: Type enum dans une methode ( break ?)

par Deleted user,

C'est simplement parce que sous cette forme, pour le compilateur, ta fonction aura un retour de façon conditionnelle uniquement (ie, il n'y a pas de "default" dans le switch ou encore un ultime "return" à la fin de la fonction).

Si tu veux éviter un warning, ajoute un retour par défaut après le switch. (Ou peut-être que le mettre dans le "default:" du switch fera l'affaire, à vérifier).

In reply to Deleted user

Re: Type enum dans une methode ( break ?)

par Elsa Nina Dupuis,
Je ne comprends pas très bien comment je suis censée implémenter cela dans mon code. Faut-il que je choisisse que "default" correspond par exemple à x?

Dans ce cas quelle est l'utilité de faire un enum sur {x,y}? En effet si x est la valeur par défaut alors il me suffirait juste d'un 

if( valeur == y ) {return qqc}
else { return qqc_dautre; }

et mon enum devient alors inutile...

(Le rôle de (x,y) est de choisir une certaine représentation par rapport a une autre, de la même façon qu'on choisirai une représentation polaire ou cartésienne des complexes. La valeur x ou y n'est pas utilisée pour des calculs.)

L'utilité des enums était de limiter les valeurs qui peuvent être passées en argument pour plus de précision dans l'appel de la fonction.
In reply to Elsa Nina Dupuis

Re: Type enum dans une methode ( break ?)

par Josué Antoine Maechling,

non ton default (ou ton return à la fin) pourrait correspondre à une autre valeur (d'après ce que j'ai compris ton type de retour n'est pas un enum...).

Par exemple tu pourrais choisir une valeur spéciale, et dans la fonction qui appelle ce switch si la valeur reçue correspond à cette valeur spéciale alors tu ne fais rien au lieu changer de représentation (si j'ai bien compris).

exemple : ton x serait "polaire", y serait "cartésien", et l'autre valeur serait "rien". C'est pas vraiment détaillé comme exemple mais c'est juste histoire de me faire comprendre. On ne te demande pas de retourner "polaire" par défaut.

Et si tu ne t'attends vraiment à n'avoir que du x ou du y alors tu devrais lancer une exception par exemple ou afficher une erreur.

Louis je te laisse corriger ou améliorer ce que je dis