ERREUR: le Contrôle peut atteindre une fin de non-void function /
Ne comprends pas pourquoi je me fais de l'avertissement que "le Contrôle peut atteindre une fin de non-void function." Des suggestions?
Voici mon code:
long double geo_fn(long reps, int seed) {
double x, y, pythag_sum, total = 0, inside = 0;
default_random_engine engine(seed);
uniform_real_distribution<double>dist(0,1);
for(int i = 0; i< reps ;i++){
x = dist(engine);
y = dist(engine);
pythag_sum = (x*x)+(y*y);
if (pythag_sum <= 1){
inside += pythag_sum;
total += pythag_sum;
}
else {
total += pythag_sum;
}
return (inside/total)/10;
}
}
Vous devez vous connecter pour publier un commentaire.
Si vous appelez la fonction avec un premier argument de
0
la boucle n'est jamais exécutée et lereturn
déclaration est, donc, n'a jamais atteint. La chute de la fin de non-void
fonction est un comportement indéfini.Mon estimation personnelle est que le
return
déclaration était destinée à un niveau plus haut, c'est à dire, dans le bloc: ce qui permettrait de garantir que la fonction renvoie toujours une valeur, et que l'avertissement s'en allait.vous devez vous assurer que,quelles que soient vos attentes, qu'il y aura toujours quelque chose à revenir, puisque vous avez déclaré votre type de retour de fonction en tant que non-nulle.
pour ce code, vous aurez besoin d'une instruction de retour qui se produisent dans le "else" cas
ce sera:
dans le cas d'une boucle "for", il y a une chance pour que la boucle se briser à "i < _nextSlot" sans retour rien. Le compilateur ne peut pas dire. de sorte que vous devrez fournir une instruction de retour pour capturer les cas où la boucle "for" "ne s'exécute jamais".
alors c'est juste le dernier exemple en combinant les deux:
Assurez-vous d'ajouter un paramètre non valide vérifier avant la boucle for. S'assurer que la fonction va retourner un code d'erreur si l'un des paramètres passés a une valeur non valide.