2016-11-25 73 views
-3

我是一個初學者在C++的結束,我想作一盤棋,當我編譯:警告:控制可以達到非void函數[-Wreturn型]}

bool isValidMove(int inCol, int inRow, int outCol, int outRow, char board[8][8]) 
{ 
    if (board[inRow][inCol] == '-') 
     return false; 
    else 
    { 
     if((board[inRow][inCol] == 'R' || board[inRow][inCol] == 'r') && isValidMoveRook(inCol, inRow, outCol, outRow, board)) 
      return true; 
     if((board[inRow][inCol] == 'K' || board[inRow][inCol] == 'k') && isValidMoveKnight(inCol, inRow, outCol, outRow, board)) 
      return true; 
     if((board[inRow][inCol] == 'R' || board[inRow][inCol] == 'r') && isValidMoveRook(inCol, inRow, outCol, outRow, board)) 
      return true; 
    } 
} 

我得到這個警告從我的編譯器warning: control may reach end of non-void function [-Wreturn-type] } 任何人都可以幫助我解決這個問題的方式,我在Mac上。

+1

,因爲你的函數可能不會返回任何東西(什麼,如果沒有在'else'分支'if's的評價爲'真'?) – UnholySheep

回答

2

如果不符合您的條件,您不會在最後返回任何內容。

bool isValidMove(int inCol, int inRow, int outCol, int outRow, char board[8][8]) { 
    if(board[inRow][inCol] == '-') { 
     return false; 
} 
else { 
    if((board[inRow][inCol] == 'R' || board[inRow][inCol] == 'r') && isValidMoveRook(inCol, inRow, outCol, outRow, board)) { 
    return true; 
     } 
     if((board[inRow][inCol] == 'K' || board[inRow][inCol] == 'k') && isValidMoveKnight(inCol, inRow, outCol, outRow, board)) { 
      return true; 
     } 
     if((board[inRow][inCol] == 'R' || board[inRow][inCol] == 'r')&&  isValidMoveRook(inCol, inRow, outCol, outRow, board)) { 
      return true; 
     } 
    } 
    // return something here 
} 
2

在你的else塊有一個路徑,通過什麼都沒有返回。這就是你被警告的事情。

+0

你能告訴我 – Ian

+0

@UnholySheep早已在評論什麼路徑對你的問題。 –

+0

我不明白,因爲如果返回false並且else返回true – Ian

相關問題