【问题标题】:Passing a 2D array to a function in C++ gives me the following error将二维数组传递给 C++ 中的函数会给我以下错误
【发布时间】:2016-04-17 22:26:50
【问题描述】:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

\\Errors:
\\'n' was not declared in this scope
\\ expected ')' before ',' token
\\ expected unqualified-id before 'int'
void abst_diff(int arr[][n], int n){
int sum_1=0;
int sum_2=0;

for(int a_i = 0; a_i < n; a_i++)
    sum_1 = sum_1 + a[a_i][a_i];

for(int a_i = 0, a_j = n-1; a_i < n; a_i++, a_j--)
    sum_2 = sum_2 + a[a_i][a_j];

sum_2=abs(sum_2-sum_1);
cout << sum_2;

}

int main(){
int n;
cin >> n;
int arr[n][n];
for(int a_i = 0;a_i < n;a_i++){
   for(int a_j = 0;a_j < n;a_j++){
      cin >> arr[a_i][a_j];
   }
}
abst_diff(arr,n);
return 0;
}

谁能帮我找出这段代码中的错误。这是一个相当简单的逻辑。我得到的错误是针对该行的: void abst_diff(int arr[][n], int n){

【问题讨论】:

  • int arr[n][n]; 这不是标准的 C++。如果您要询问诸如 gnu-c++98 之类的特定方言,请告诉我们。在任何情况下,在 C++ 中都有比 C 样式数组更好的工具。

标签: c++


【解决方案1】:

你不能分配一个变量来定义一个数组的大小。也许你可以使用一个

#define SIZE 50

或者您可以使用动态变量例如:

#include<iostream>

using namespace std;

int main()
{
    int n ,*a;
    cout<<"Enter size of array= ";
    cin>>n;
    a=new int[n];       //allocate memory 
    for(int i=0;i<n;i++)    
        *(a+i)=i;
    for(int i=0;i<n;i++)
        cout<<*(a+i)<<endl;
    return 0;
} 

void abst_diff(int arr[][**n**], int n)

这里也不能给出尺寸。

#include <vector>
#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;


void abst_diff(int arr[50][50], int n){
int sum_1=0;
int sum_2=0;

for(int a_i = 0; a_i < n; a_i++)
    sum_1 = sum_1 + arr[a_i][a_i];

for(int a_i = 0, a_j = n-1; a_i < n; a_i++, a_j--)
    sum_2 = sum_2 + arr[a_i][a_j];

sum_2=abs(sum_2-sum_1);
cout << sum_2;

}

int main(){
int n;
cin >> n;
int arr[50][50];
for(int a_i = 0;a_i < n;a_i++){
   for(int a_j = 0;a_j < n;a_j++){
      cin >> arr[a_i][a_j];
   }
}
abst_diff(arr,n);
return 0;
}

请使用“/”而不是“\”进行评论。

【讨论】:

    【解决方案2】:

    我实际上是想传递一个动态变量(即数组),而不是一个固定大小的已定义变量。

    我听取了您的第一个建议并设法提出了我自己的解决方案:

    #include <cmath>
    #include <cstdio>
    #include <vector>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    
    int **createArr(int **array, int n){
    
    array = new int*[n];
    for (int row=0; row<n; row++) {
        array[row] = new int[n];
    }
    return array;
    
    }
    
    void abst_diff(int **arr,int n){
    int sum_1=0;
    int sum_2=0;
    
    for(int a_i = 0; a_i < n; a_i++)
        sum_1 = sum_1 + *(*(arr+a_i)+a_i);//arr[a_i][a_i];
    
    for(int a_i = 0, a_j = n-1; a_i < n; a_i++, a_j--)
        sum_2 = sum_2 + arr[a_i][a_j];
    
    sum_2=abs(sum_2-sum_1);
    cout << sum_2;
    
    }
    
    int main(){
    int n;
    cin >> n;
    int **arr=createArr(arr,n);
    for(int a_i = 0;a_i < n;a_i++){
       for(int a_j = 0;a_j < n;a_j++){
          cin >> arr[a_i][a_j];
       }
    }
    abst_diff(arr,n);
    return 0;
    }
    

    这个程序计算abs。对角线之和之间的差。我的问题只是将动态变量传递给函数。

    感谢您的帮助! :)

    PS。 '\' 是一个诚实的错误。

    【讨论】:

    • 是的,这对初学者来说是一个很好的解决方案。保持下去。随时!
    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多