2009-10-01 6 views
8

Wer weiß schon, was dieser Fehler eigentlich bedeuten könnte? Ich stolpere über ein bisschen Code, der das nicht zu umgehen scheint. Ich habe es mit nur h * 2 anstelle von hprime versucht, und nur w * 2 statt wprime. Jedes Mal, wenn ich den gleichen Compiler erhalten (g ++ Compiler) Fehler:'Variablenname' kann nicht in einem konstanten Ausdruck erscheinen C++

grid.cpp: Im Konstruktor 'Grid :: Grid (int, int)':

grid.cpp: 34: Fehler: ‚hprime 'kann nicht in einem Konstanten-Ausdruck erscheinen

(der Compiler sagt nicht immer hprime, es wird sagen, welche Variable ist da, sei es h oder hprime oder Breite). Jede Hilfe würde sehr geschätzt werden!

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

Es sieht nicht so aus, wie es auch sein 'const' muss. Du modifizierst es nicht und es ist nur der Funktionsumfang. –

Antwort

22

Sie können nicht new verwenden, um ein zweidimensionales Feld zuzuordnen, aber Sie können die Zeile wie diese anstößigen ändern:

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

Wenn es nicht hat zu sein multidimensionales, Sie können tun:

grid = new int[wprime*hprime]; 

und nur indizieren wie

grid[A*wprime + B] 

wo würden Sie normalerweise indizieren wie

grid[A][B] 
+0

Arbeitete, danke. – Captaindh00m

+4

Sie können neu verwenden, um ein zweidimensionales Array zuzuordnen, aber nur die erste Dimension ist variabel. 'new Grid [i] [3]' ist in Ordnung, 'new Grid [3] [i]' ist nicht. Sie ordnen also wirklich ein eindimensionales Array von Grid [3] zu, aber das ist alles, was ein mehrdimensionales C/C++ Array ist. –

Verwandte Themen