2016-11-25 17 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のどれもが 'true'に評価されなかったらどう?)あなたの関数は何も返さない可能性があるため – 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

ifがfalseを返し、elseがtrueを返すため、私はそれを取得しません – Ian

関連する問題