2009-10-01 67 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