/ / Error - Le contrôle peut atteindre la fin de la fonction non-vide - c ++

Erreur - Le contrôle peut atteindre la fin de la fonction non vide - c ++

bool isValidDate(int month, int day, int year) {
if(isLeapYear(year)){
if(year >= 1752 && month >= 9 && day >= 13){
if((month == 9 || month == 4 || month == 6 || month == 11) &&     (day <= 30)){
return true;
}
else if((month == 2) && (day <= 29)){
return true;
}
else if(((month >= 1 && month <= 3) || (month >=5 && month <= 8) || month == 10 || month == 12) && (day <= 31)){
return true;
}
else{
return false;
}
}
}
else {
if(year >= 1752 && month >= 9 && day >= 13){
if((month == 9 || month == 4 || month == 6 || month == 11) && (day <= 30)){
return true;
}
else if((month == 2) && (day <= 28)){
return true;
}
else if(((month >= 1 && month <= 3) || (month >=5 && month <= 8) || month == 10 || month == 12) && (day <= 31)){
return true;
}
else{
return false;
}
}
}
}

Je ne comprends pas pourquoi je reçois une telle erreur. Il ne peut y avoir que deux itinéraires possibles. Cela signifie donc qu’il y aura une valeur de retour. Je suis très confus. S'il vous plaît aider!

Réponses:

1 pour la réponse № 1

Il existe un itinéraire possible sans retour. if(year >= 1752 && month >= 9 && day >= 13) n'évalue pas à vrai.

else{
if(year >= 1752 && month >= 9 && day >= 13){
if((month == 9 || month == 4 || month == 6 || month == 11) && (day <= 30)){
return true;
}
else if((month == 2) && (day <= 28)){
return true;
}
else if(((month >= 1 && month <= 3) || (month >=5 && month <= 8) || month == 10 || month == 12) && (day <= 31)){
return true;
}
else{
return false;
}
}
// return here
}

1 pour la réponse № 2

Il n'y a pas "d'autre" pour cela si:

if(year >= 1752 && month >= 9 && day >= 13){

1 pour la réponse № 3

Il n'y a pas return à la fin de la fonction qui peut être atteint si (year >= 1752 && month >= 9 && day >= 13) est false.

Notez que ce qui précède if peut ne pas fonctionner comme prévu. Vous voulez probablement traiter comme valides uniquement les dates postérieures au 13 septembre 1752, mais toutes les dates avec un mois avant septembre sont considérées comme non valides. Vous voudrez peut-être sur le début de la fonction:

if (year < 1752)
return false;
else if (year == 1752) {
if (month < 9 || (month == 9 && day < 13))
return false;
}

En passant, vous n’avez pas à dupliquer tous les blocs pour les années bissextiles et non bissextiles. Le cheque isLeapYear() peut être fait que si month == 2