2009-10-01 304 views
8

任何人都有任何线索,这个错误实际上可能意味着什么?我绊倒了一些似乎无法解决的代码。我已经用h * 2而不是hprime试过了,只是w * 2而不是wprime。每次我得到相同的编译器(G ++编译器)的错误:“变量名”不能出现在常量表达式中C++

grid.cpp:在构造 '网格::网格(INT,INT)':

grid.cpp:34:错误:“hprime '不能出现在一个常量表达式中(编译器并不总是说hprime,它会说任何变量在那里,不管是h还是hprime或者宽度)。任何帮助将不胜感激!

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> 
     } 
    } 
} 
+0

它看起来并不像它甚至需要是'const'。你没有修改它,它只是功能范围。 – 2009-10-01 03:37:35

回答

22

不能使用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] 
+0

工作过,谢谢。 – Captaindh00m 2009-10-01 03:51:39

+4

您可以使用new来分配二维数组,但只有第一维是可变的。 '新电网[我] [3]'很好,'新电网[3] [我]'不是。所以你真的在分配一个Grid [3]的一维数组,但是这就是C/C++多维数组。 – 2009-10-01 11:37:56

相关问题