2009-10-01 9 views
8

Chiunque ha idea di cosa possa effettivamente significare questo errore? Sto inciampando in un po 'di codice che non riesco a capirlo. L'ho provato con h * 2 invece di hprime, e solo w * 2 invece di wprime. Ogni volta che ho lo stesso compilatore (g compilatore ++) errore:'nome variabile' non può apparire in un'espressione costante C++

grid.cpp: nel costruttore 'Griglia :: griglia (int, int)':

grid.cpp: 34: errore: 'hprime 'non può apparire in una costante-espressione

(il compilatore non dice sempre hprime, dirà qualunque variabile ci sia, sia h o hprime o larghezza). Qualsiasi aiuto sarebbe molto apprezzato!

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

Non sembra che ha bisogno anche di essere 'const'. Non lo stai modificando ed è solo lo scopo della funzione. –

risposta

22

Non è possibile utilizzare new di allocare un array bidimensionale, ma si può modificare la riga incriminata in questo modo:

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

se non hanno a essere multidimensionali, è possibile fare:

grid = new int[wprime*hprime]; 

e proprio indice di esso come

grid[A*wprime + B] 

in cui si farebbe normalmente indicizzarlo come

grid[A][B] 
+0

Ha funzionato, grazie. – Captaindh00m

+4

È possibile ordinare l'utilizzo di nuovo per allocare un array bidimensionale, ma solo la prima dimensione è variabile. 'new Grid [i] [3]' sta bene, 'new Grid [3] [i]' non lo è. Quindi in realtà stai assegnando una matrice unidimensionale di Grid [3], ma poi è tutto un array multidimensionale C/C++. –

Problemi correlati