2009-10-01 10 views
8

¿Alguien tiene alguna pista de lo que este error realmente podría significar? Me estoy tropezando con un código que parece que no puede evitarlo. Lo he intentado con solo h * 2 en lugar de hprime, y solo con w * 2 en lugar de con wprime. Cada vez que sale el mismo compilador (g ++ compilador) error de:'nombre de variable' no puede aparecer en una expresión constante C++

grid.cpp: En constructor 'cuadrícula :: GRID (int, int)':

grid.cpp: 34: error: 'hprime 'no puede aparecer en una expresión constante

(el compilador no siempre dice hprime, indicará cualquier variable que exista, ya sea h o hprime o ancho). ¡Cualquier ayuda sería muy apreciada!

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

No parece que ni siquiera tiene que ser 'const'. No lo estás modificando y solo es un alcance funcional. –

Respuesta

22

No puede utilizar new asignar una matriz de dos dimensiones, pero se puede cambiar la línea en cuestión así:

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

si no tienen a ser multidimensional, que puede hace:

grid = new int[wprime*hprime]; 

y justo lo indexará como

grid[A*wprime + B] 

donde normalmente se indexará como

grid[A][B] 
+0

Funcionó, gracias. – Captaindh00m

+4

Puede ordenar-utilizar nuevo para asignar una matriz bidimensional, pero solo la primera dimensión es variable. 'new Grid [i] [3]' está bien, 'new Grid [3] [i]' no. Entonces realmente estás asignando una matriz unidimensional de Grid [3], pero eso es todo lo que tiene una matriz multidimensional de C/C++. –

Cuestiones relacionadas