2017-02-08 18 views
-1

Я пытаюсь скомпилировать эту программу с (для CS50 онлайн класса), и продолжать получать следующее сообщение об ошибке:Непустой ошибка функции

fifteen.c: 233: 1: ошибка: управление может достичь конца Непустой функции [-Werror, -Wreturn типа] }

Я не спрашиваю о логике моего кода, но больше ищу ошибки синтаксиса, что я отсутствовал для последний час. Код ниже. Благодаря!

bool move(int tile) 
{ 
    for (int i = 0; i < d - 1; i++){ 

     for (int j= 0; j < d - 1; j++){ 

      if (tile == board[i][j]){ 

       if (board[i+1][j] == tile){ 
        board[i+1][j] = 0; 
        board[i+1][j] = tile; 
        return true; 
             } 
       else if (board [i-1][j] == 0){ 
        board[i-1][j] = tile; 
        board [i-1][j] = 0; 
        return true; 
             } 
       else if (board [i][j+1] == 0){ 
        board[i][j+1] = tile; 
        board [i][j+1] = 0; 
        return true; 
             } 
       else if (board [i][j-1] == 0){ 
        board[i][j-1] = tile; 
        board [i][j-1] = 0; 
        return true; 
             } 
    } 
    return false; 
} 
} 
} 
+0

Исправьте отступы и может стать ясно. помните, что компилятор не знает, какие значения будут иметь все во время выполнения, поэтому он не сделает никаких предположений для вас (например, если один из ваших операторов if всегда будет правдой) ... – John3136

ответ

0

Эта ошибка говорит, что ваш метод может дойти до конца без возвращения значение. Это происходит в этом случае, потому что ваши скобки неуместны.

Попробуйте следующее:

bool move(int tile) { 
    for (int i = 0; i < d - 1; i++) { 
      for (int j = 0; j < d - 1; j++) { 
       if (tile == board[i][j]) { 
        if (board[i+1][j] == tile) { 
         board[i+1][j] = 0; 
         board[i+1][j] = tile; 
         return true; 
        } 
        else if (board [i-1][j] == 0){ 
         board[i-1][j] = tile; 
         board [i-1][j] = 0; 
         return true; 
        } 
        else if (board [i][j+1] == 0){ 
         board[i][j+1] = tile; 
         board [i][j+1] = 0; 
         return true; 
        } 
      } 
      else if (board [i][j-1] == 0){ 
       board[i][j-1] = tile; 
       board [i][j-1] = 0; 
       return true; 
      } 
     } 
    } 
    return false; 
} 
+0

Обратите внимание: скобка для внешнего if-утверждения перед другим - если комплимент. – igoldthwaite

+0

Бум! Теперь он компилируется, igoldthwaite! Я буду принимать ответ, как только это позволит мне. Это безумие, как такая незначительная ошибка может заставить вас бить головой в стену в течение часа. Как я понимаю, я новичок. – rookie

 Смежные вопросы

  • Нет связанных вопросов^_^