【问题标题】:Kindly help me resolve error in this c++ code请帮助我解决此 C++ 代码中的错误
【发布时间】:2021-05-05 10:33:32
【问题描述】:

这个问题来自GFG:https://practice.geeksforgeeks.org/problems/n-queen-problem0315/1#(N皇后问题)

这是我的代码:

#include<bits/stdc++.h>
using namespace std;

int valid;
class Solution{
public:

    bool isSafe(int n, int arr[n][n], int row, int col){
        int i,j;
        for(i=0;i<col;i++){
            if(arr[row][i]){
                return false;
            }
        }
        for(i=row,j=col;i>=0&&j>=0;i--,j--){
            if(arr[i][j]){
                return false;
            }
        }
        for(i=row,j=col;i<n&&j>=0;i++,j--){
            if(arr[i][j]){
                return false;
            }
        }
        return true;
    }
    
    void QueenUtil(int n, int arr[n][n], int col, vector<vector<int>> &ans){
        if(col==n){
            valid=1;
            vector<int> v;
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    if(arr[j][i]){
                        v.push_back(j);
                    }
                }
            }
            ans.push_back(v);
            return;
        }
        for(int i=0;i<n;i++){
            if(isSafe(n,arr,i,col)){
                arr[i][col] = 1;
                QueenUtil(n,arr,col+1,ans);
                arr[i][col] = 0;
            }
        }
    }
    
    vector<vector<int>> nQueen(int n) {
        // code here
        valid=0
        vector<vector<int>> ans(n);
        int arr[n][n];
        memset(arr,0,sizeof(arr));
        int col = 0;
        QueenUtil(n,arr,col,ans);
        return ans;
    }
};

int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        Solution ob;
        vector<vector<int>> ans = ob.nQueen(n);
        if(ans.size()==1){
            cout<<-1<<endl;
        }else{
            for(int i=0;i<ans.size();i++){
                cout<<"[";
                for(int u:ans[i]){
                    cout<<u<<" ";
                }
                cout<<"] ";
            }
            cout<<endl;
        }
    }
    return 0;
}

这是编译错误:

prog.cpp:8:33: error: use of parameter outside function body before ‘]’ token
     bool isSafe(int n, int arr[n][n], int row, int col){
                                 ^
prog.cpp:8:36: error: use of parameter outside function body before ‘]’ token
     bool isSafe(int n, int arr[n][n], int row, int col){
                                    ^
prog.cpp:8:37: error: expected ‘)’ before ‘,’ token
     bool isSafe(int n, int arr[n][n], int row, int col){
                                     ^
prog.cpp:8:39: error: expected unqualified-id before ‘int’
     bool isSafe(int n, int arr[n][n], int row, int col){

【问题讨论】:

  • 您不能像在 C++ 中那样声明二维数组。由于n小于10,这里最简单的方法是声明int arr[10][10]

标签: c++ error-handling compiler-errors c++14 out-of-memory


【解决方案1】:

nQueen(int n) 函数中声明它时,只需使用vector&lt;vector&lt;int&gt;&gt; arr(n, vector&lt;int&gt;(n)) 而不是int arr[10][10],并仅将vector&lt;vector&lt;int&gt;&gt; 作为 void QueenUtil(int n, int arr[n][n], int col, vector&lt;vector&lt;int&gt;&gt; &amp;ans) 和布尔值isSafe(int n, int arr[n][n], int row, int col) 的参数传递。

为什么我不能改用int arr[n][n]
那是因为编译器需要在编译时知道数组的大小(在你的情况下是存储在n 中的值)。但是您的变量不是const 值。这意味着您不能使用它来定义多维数组。另外 C++ 不允许在另一个函数参数中使用一个函数参数。这是部分,因为规范没有说明解决函数参数的明确方法(从左到右或从右到左)。

【讨论】:

    猜你喜欢
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2013-07-11
    • 2021-08-31
    相关资源
    最近更新 更多