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

Nouvelle C++. Dans le programme suivant, je suis en train d'écrire, j'obtiens 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);
  }
}

quelqu'un Peut m'aider ici? Grâce.

10
demandé sur Community 2009-03-23 20:41:42

6 réponses

What is wrong:

la définition de "nonrecursivecountcells" n'a pas de paramètre appelé grid. Vous devez passer le type et le nom de la variable à la fonction. Vous ne passe que le type.

Remarque Si vous utilisez la grille des noms pour le paramètre, ce nom n'a rien à voir avec votre déclaration principale de grille (). Vous pourriez avoir utilisé un autre nom.

***vous ne pouvez pas non plus passer des tableaux comme valeur.


Comment résoudre:

la façon simple de corriger ceci est de passer un pointeur à un tableau à la fonction "nonrecursivecountcells".

int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int, int);

mieux et sécurisé ->

int nonrecursivecountcells(color (&grid)[ROW_SIZE][COL_SIZE], int, int);

au Sujet de la portée:

Une variable créé sur la pile sort de la portée lorsque le bloc est déclaré en est résilié. Un bloc est rien dans une ouverture et correspondance clôture accolade. Par exemple un if() { }, function() { }, alors() {}, ...

Remarque: je l'ai dit, variable et non les données. Par exemple, vous pouvez allouer de la mémoire sur le tas et que les données restent valables, même en dehors de la portée. Mais la variable qui l'indiquait à l'origine serait quand même hors de portée.

14
répondu Brian R. Bondy 2017-05-23 10:27:35

grille n'est pas mondial, elle est locale à la fonction principale. Modifiez ce qui suit:

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

à:

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

en gros vous avez oublié de donner à ce premier param un nom, grid fera l'affaire puisqu'il correspond à votre code.

4
répondu Evan Teran 2009-03-23 19:07:19

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

1
répondu JeffH 2009-03-23 17:45:49

comme dit le compilateur,grid n'a pas été déclaré dans la portée de votre fonction :) "portée" signifie essentiellement un ensemble de broches bouclées. Chaque variable est limitée à la portée dans laquelle elle est déclarée (on ne peut y accéder en dehors de cette portée). Dans votre cas, vous êtes déclarant l' grid variable main() fonction et d'essayer de l'utiliser dans nonrecursivecountcells(). Vous semblez le passer comme argument colors toutefois, alors je suggère que vous venez de renommer vos utilisations de gridnonrecursivecountcells()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 examiner le passer comme un pointeur (à moins que quelqu'un d'autre dit quelque chose au contraire).

1
répondu rmeador 2009-03-23 17:46:30

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

Soit grille un tableau global, ou la passer en paramètre à la fonction.

0
répondu Pablo Santa Cruz 2009-03-23 17:44:30

fonction fix déclaration

int nonrecursivecountcells(color grid[ROW_SIZE][COL_SIZE], int row, int column)
0
répondu bayda 2009-03-23 17:45:42