N皇后问题中isvalid函数出现invalid operands to binary expressions错误
N皇后问题isvalid函数编译错误排查与修复
错误原因
- 重复定义变量:函数内多次使用
int x = row; int y = col;,C++不允许同一函数作用域内重复定义同名变量,这会导致编译器解析混乱,错误提示位置被误导到board[x][y] == 'Q'行。 - 非标准逻辑运算符:使用了
and作为逻辑与,这是C++的替代关键字,需要特定编译选项支持,标准写法应为&&。 - 语法遗漏:
return true末尾缺少分号,违反C++语法规则。
修复后的代码
bool isvalid(vector<vector<string>>& board, int &row, int &col, int &n){ int x = row ; int y = col ; while(y >= 0){ if(board[x][y] == 'Q'){ return false; } y-- ; } // 重新赋值,不再重复定义变量 x = row ; y = col ; while(x >= 0 && y >= 0){ if(board[x][y] == 'Q') return false; x-- ; y-- ; } x = row ; y = col ; while(x < n && y >= 0){ if(board[x][y] == 'Q') return false; x++ ; y-- ; } return true; // 补上分号 }
关键修改点
- 去掉后续
x和y定义前的int,改为直接赋值,避免重复定义。 - 将
and替换为标准C++逻辑与运算符&&。 - 为
return true添加末尾分号。
内容的提问来源于stack exchange,提问作者HIMANSHU KUMAR AMB
相关产品推荐
相关产品推荐

