Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何修复';arr未在范围内声明';在我的职责范围内?_C++_Arrays_Function - Fatal编程技术网

C++ 如何修复';arr未在范围内声明';在我的职责范围内?

C++ 如何修复';arr未在范围内声明';在我的职责范围内?,c++,arrays,function,C++,Arrays,Function,如果我运行此代码: #include<bits/stdc++.h> using namespace std; int hourGlass(int x, int y) { int sum; for (int a=y; a<=y+2; a++) { sum += arr[x][a]; sum += arr[x+2][a]; } return sum; } int main(){ int arr[

如果我运行此代码:

#include<bits/stdc++.h>

using namespace std;

int hourGlass(int x, int y) {
    int sum;
    for (int a=y; a<=y+2; a++) {
        sum += arr[x][a];
        sum += arr[x+2][a];
    }
    return sum;
}

int main(){
    
    int arr[7][7];
    
    for (int i=0; i<=5; i++) {
        for (int j=0; j<=5; j++) {
            cin >> arr[i][j];
        }
    }
    
    for (int i=0; i<=3; i++) {
        for (int j=0; j<=3; j++) {
            cout << hourGlass(i,j);
        }
    }
    
}
#包括
使用名称空间std;
整数沙漏(整数x,整数y){
整数和;

对于(int a=y;a只需将
int arr[7][7]
移到
main()
函数之外,并将其置于
int沙漏(int x,int y)
之前。这将使其成为全局的,也就是说,所有在它之后声明的函数(而不仅仅是单个函数)都可以看到它


或者,也许是更好的解决方案(但仅限于C++),使用一些STL容器,例如
std::vector
std::array
,并将其作为函数参数传递。

您的
沙漏
函数无权访问
函数范围内的
arr
。您可以将
arr
作为参数传递给函数,如下所示:

int hourGlass(int x, int y, int const (&arr)[7][7]) {
  // ...
}
hourGlass(i, j, arr)
并按如下方式调用函数:

int hourGlass(int x, int y, int const (&arr)[7][7]) {
  // ...
}
hourGlass(i, j, arr)

另外,请注意,
sum
在您的函数中未初始化,因此从中读取会调用未定义的行为。

使用
std::array
而不是原始数组,并将其作为参数添加到
沙漏
。与您的问题无关,但请阅读,也请投资,或使用一些类。命名变量,包括ing数组只存在于声明它们的上下文中。一个函数中的声明在另一个函数中是不可见的。您希望
arr
,在
main()
中定义的数组在函数
hourGlass()中是可见的如果你想理解这一点,就可以尝试阅读C++上的任何介绍性文本。<代码>和> /COD>未初始化,这样当你编译代码时你会有不明确的行为。不好的建议。全局变量应该被回避。