L’avertissement exact que je reçois est
warning C4715: 'hand::show' : not all control paths return a value
et hand :: show est
std::ostream& hand::show(std::ostream& os) const { if(side == left) { return os<<display[0]<<display[1]<<display[2]<<display[3]<<display[4]; } if(side == right) { return os<<display[4]<<display[3]<<display[2]<<display[1]<<display[0]; } }
où side est une variable de type orientation
orientation{ left = -1, right = 1 };
Que signifie l’avertissement et quelle serait la meilleure solution pour s’en débarrasser?
Votre compilateur n’est pas assez intelligent pour prendre en compte le fait que les deux seules options pour side
sont left
et right
, il pense donc qu’il est possible qu’aucune instruction return ne soit exécutée. Quand side
n’est ni à left
ni à right
, votre fonction ne dit pas quelle valeur renvoyer.
L’erreur signifie que si side n’est ni à gauche ni à droite, votre fonction ne renverra pas de valeur – aucun des côtés n’est déclaré de manière incorrecte ou votre enum l’est. Un enum devrait être défini comme
enum orientation {left, right};
Alors essayez de changer votre structure d’orientation pour cela.
Si side
n’est ni à left
ni à right
, la valeur de retour n’est pas définie.
Même si l’ orientation
est une énumération avec seulement deux valeurs (pour le moment), elle peut toujours avoir une valeur différente pour l’une des raisons suivantes:
side
peut être non initialisé, donc il ne peut être ni à left
ni à right
side
peut avoir été atsortingbuée à side
via la conversion de type, par exemple *((int*)&side) = 2
Les solutions possibles incluent:
else
comme suggéré par qc. Changez-le pour être:
if(side == left) { return ...; } else if(side == right) { return ...; } else { ...handle error... }
L’avertissement signifie qu’il est possible de passer par votre méthode sans renvoyer de valeur explicite. Avec votre code:
std::ostream& hand::show(std::ostream& os) const { if(side == left) { return os<
si side != left
et side != right
, vous ne retournez rien. Une façon courante de résoudre ce problème est de supposer, par exemple, que si ce n'est pas "à gauche", on suppose toujours "à droite":
std::ostream& hand::show(std::ostream& os) const { if(side == left) { return os<
Vous pouvez faire ce que vous avez dit, ou, puisque dans ce cas, vous retournez vraiment la même chose de toute façon …
std::ostream& hand::show(std::ostream& os) const { if(side == left) { os<
Pour se débarrasser de l’avertissement, remplacez le deuxième if
par un else
:
std::ostream& hand::show(std::ostream& os) const { if(side == left) { return os<
Comme le suggèrent d’autres personnes, le problème est que votre side
n’est peut-être ni à left
ni à right
.
Vous pouvez modifier votre fonction pour effectuer l’une des opérations suivantes: