'变量名'不能出现在常量表达式c ++中

Cap*_*00m 8 c++ compiler-construction g++

任何人都有任何线索这个错误可能意味着什么?我正在绊倒一些似乎无法绕过它的代码.我用h*2代替hprime尝试了它,只用w*2而不是wprime.每次我得到相同的编译器(g ++编译器)错误:

grid.cpp:在构造函数'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>
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*off 22

您不能使用new分配二维数组,但您可以像这样更改有问题的行:

  grid = new int*[wprime];
  for (int i = 0 ; i < wprime ; i++)
      grid[i] = new int[hprime];
Run Code Online (Sandbox Code Playgroud)

如果它不具有是多层面的,你可以这样做:

grid = new int[wprime*hprime];
Run Code Online (Sandbox Code Playgroud)

并只是索引它

grid[A*wprime + B]
Run Code Online (Sandbox Code Playgroud)

你通常会在哪里索引它

grid[A][B]
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用new来分配二维数组,但只有第一个维度是可变的.`new Grid [i] [3]`很好,`new Grid [3] [i]`不是.所以你真的要分配一个Grid的一维数组[3],但那时所有的C/C++多维数组都是. (4认同)