错误 - 控制可能会达到非空函数的结束

时间:2015-10-03 20:58:47

标签: 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;
      }
    }
   }
}

我不知道为什么会出现这样的错误。只能有两条可能的路线,这意味着肯定会有一个返回值。我很困惑。请帮忙!

3 个答案:

答案 0 :(得分:1)

有一条可能没有回复的路线。如果if(year >= 1752 && month >= 9 && day >= 13)没有评估为真,那就是

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 :(得分:1)

没有&#34;否则&#34;为此:如果:

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

答案 2 :(得分:1)

如果return(year >= 1752 && month >= 9 && day >= 13),则可以在功能结尾处找到false

请注意,上述if可能无法正常工作。您可能希望在1752年9月13日之后将其视为有效日期。但它将9月之前的任何日期视为无效。您可能需要在函数开头:

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

顺便说一句,您不必为跳跃和非闰年复制所有块。只有在isLeapYear()

时才可以完成支票month == 2