pointer - C++ "n'a pas été déclaré dans cette portée" erreur de compilation




storage class c++ (4)

Nouveau en C ++. Dans le programme suivant, j'écris, j'ai cette erreur:

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

Voici le code:

#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);
  }
}

Est-ce que quelqu'un pourrait m'aider? Merci.


la grille n'est pas globale, elle est locale à la fonction principale. Change ça:

int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int row, int column)

pour ça:

int nonrecursivecountcells(color grid[ROW_SIZE][COL_SIZE], int row, int column)

Fondamentalement, vous avez oublié de donner un nom à ce premier param, la grille fera car il correspond à votre code.


La grille n'est pas présente sur la portée de nonrecursivecountcells.

Soit faire un tableau global, soit le passer en paramètre à la fonction.


Comme le dit le compilateur, la grid n'a pas été déclarée dans la portée de votre fonction :) "Scope" signifie essentiellement un ensemble d'accolades. Chaque variable est limitée à la portée dans laquelle elle est déclarée (elle ne peut pas être accédée en dehors de cette portée). Dans votre cas, vous déclarez la variable grid dans votre fonction main() et essayez de l'utiliser dans nonrecursivecountcells() . Vous semblez le passer comme colors de l'argument cependant, donc je vous suggère de simplement renommer vos utilisations de la grid dans nonrecursivecountcells() en colors . Je pense qu'il peut y avoir quelque chose de mal à essayer de passer le tableau de cette façon, aussi, vous devriez probablement étudier le passage comme un pointeur (à moins que quelqu'un d'autre dise quelque chose du contraire).


Le premier argument de nonrecursivecountcells () n'a pas de nom de variable. Vous essayez de le référencer en tant que grille dans le corps de la fonction, donc vous voulez probablement l'appeler grille.





scope