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>未初始化,这样当你编译代码时你会有不明确的行为。不好的建议。全局变量应该被回避。