C ++新手。在我写的以下程序中我得到了这个错误:
g++ -o Blob blob.cc
blob.cc: In function 'int nonrecursivecountcells(color (*)[7], int, int)':
blob.cc:41: error: 'grid' was not declared in this scope
以下是代码:
#include <iostream>
enum color {BACKGROUND, ABNORMAL, TEMPORARY};
const int ROW_SIZE = 7;
const int COL_SIZE = 7;
int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int, int);
using namespace std;
int main()
{
color grid[ROW_SIZE][COL_SIZE] =
{{BACKGROUND, ABNORMAL, BACKGROUND, ABNORMAL, BACKGROUND, BACKGROUND, BACKGROUND},
{ABNORMAL, ABNORMAL, BACKGROUND, ABNORMAL, BACKGROUND, BACKGROUND, BACKGROUND},
{BACKGROUND, BACKGROUND, ABNORMAL, ABNORMAL, BACKGROUND, BACKGROUND, ABNORMAL},
{BACKGROUND, BACKGROUND, BACKGROUND, ABNORMAL, ABNORMAL, ABNORMAL, BACKGROUND},
{BACKGROUND, BACKGROUND, BACKGROUND, ABNORMAL, BACKGROUND, BACKGROUND, BACKGROUND},
{BACKGROUND, BACKGROUND, BACKGROUND, BACKGROUND, BACKGROUND, ABNORMAL, BACKGROUND},
{BACKGROUND, ABNORMAL, ABNORMAL, BACKGROUND, BACKGROUND, BACKGROUND, ABNORMAL}};
cout << "Enter row number" << endl;
int row;
cin >> row;
cout << "Enter column number" << endl;
int column;
cin >> column;
int number = nonrecursivecountcells(grid, row, column);
cout << "Number off cells in the blob that contains grid[" << row << "][" << column << "] are: " << number << endl;
return 0;
}
int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int row, int column)
{
if (row < 0 || row >= ROW_SIZE || column < 0 || column >= COL_SIZE)
{
return 0;
}
else if (grid[row][column] != ABNORMAL)
{
return 0;
}
else
{
grid[row][column] = TEMPORARY;
return 1
+ nonrecursivecountcells(grid, row - 1, column - 1) + nonrecursivecountcells(grid, row - 1, column)
+ nonrecursivecountcells(grid, row - 1, column + 1) + nonrecursivecountcells(grid, row, column + 1)
+ nonrecursivecountcells(grid, row + 1, column + 1) + nonrecursivecountcells(grid, row + 1, column)
+ nonrecursivecountcells(grid, row + 1, column - 1) + nonrecursivecountcells(grid, row, column - 1);
}
}
任何人都可以帮助我吗?感谢。
答案 0 :(得分:14)
出了什么问题:
“nonrecursivecountcells”的定义没有名为grid的参数。您需要将类型AND变量名称传递给函数。你只传递了这种类型。
请注意,如果对参数使用名称网格,则该名称与网格的main()声明无关。您也可以使用任何其他名称。
***
Also you can't pass arrays as values.
如何解决:
解决这个问题的简单方法是将指向数组的指针传递给函数“nonrecursivecountcells”。
int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int, int);
更好,输入更安全 - &gt;
int nonrecursivecountcells(color (&grid)[ROW_SIZE][COL_SIZE], int, int);
关于范围:
当声明它的块终止时,在堆栈上创建的变量超出范围。块是开口内的任何内容,匹配右括号。例如,if(){},function(){},while(){},...
注意我说变量而不是数据。例如,您可以在堆上分配内存,即使在范围之外,该数据仍将保持有效。但最初指向它的变量仍然会超出范围。
答案 1 :(得分:4)
网格不是全局的,它是主要功能的本地。改变这个:
int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int row, int column)
到此:
int nonrecursivecountcells(color grid[ROW_SIZE][COL_SIZE], int row, int column)
基本上你忘了给第一个参数赋一个名字,网格会做,因为它匹配你的代码。
答案 2 :(得分:1)
nonrecursivecountcells()的第一个参数没有变量名。您尝试在函数体中将其引用为网格,因此您可能希望将其称为网格。
答案 3 :(得分:1)
正如编译器所说,grid
未在函数范围内声明:)“Scope”基本上是指一组花括号。每个变量都限于声明它的范围(不能在该范围之外访问)。在您的情况下,您在grid
函数中声明main()
变量并尝试在nonrecursivecountcells()
中使用它。您似乎将其作为参数colors
传递,因此我建议您将grid
中nonrecursivecountcells()
的使用重命名为colors
。我认为尝试以这种方式传递数组可能有问题,所以你应该调查将它作为指针传递(除非别人说的相反)。
答案 4 :(得分:0)
网格。
将 grid 设为全局数组,或将其作为参数传递给函数。
答案 5 :(得分:0)
修复
上的函数声明int nonrecursivecountcells(color grid[ROW_SIZE][COL_SIZE], int row, int column)