«имя переменной» не может появляться в константном выражении c ++ - PullRequest
8 голосов
/ 01 октября 2009

Кто-нибудь знает, что на самом деле может означать эта ошибка? Я использую немного кода, который не может обойтись. Я пробовал только с h * 2 вместо hprime и просто с w * 2 вместо wprime. Каждый раз, когда я получаю одну и ту же ошибку компилятора (g ++ compiler):

grid.cpp: в конструкторе rid Grid :: Grid (int, int) ’:

grid.cpp: 34: ошибка: «hprime» не может появляться в константном выражении

(компилятор не всегда говорит hprime, он говорит, какая бы переменная ни была, будь то h или hprime или width). Любая помощь будет принята с благодарностью!

class Grid
{
    public:
    Grid(int x, int y);
    ~Grid();

    void addObstacle(int w, int h);
    void toString();

    int** grid;
    int height;
    int width;

};

Grid::Grid(int w, int h)
{
    width = w;
    height = h;
    const int hprime = h*2;
    const int wprime = w*2;
    grid = new int[wprime][hprime];

    for(int x=0;x<wprime;x++) {
        for (int y=0; y<hprime;y++) {
            grid[x][y] = 0;<br>
        }
    }
}

1 Ответ

22 голосов
/ 01 октября 2009

Вы не можете использовать new для выделения двумерного массива, но вы можете изменить ошибочную строку следующим образом:

  grid = new int*[wprime];
  for (int i = 0 ; i < wprime ; i++)
      grid[i] = new int[hprime];

Если не имеет многомерного значения, вы можете сделать:

grid = new int[wprime*hprime];

и просто индексировать его как

grid[A*wprime + B]

где вы обычно индексируете это как

grid[A][B]
...