2009-10-01 16 views
8

Ktoś ma jakąś wskazówkę, co ten błąd może w rzeczywistości znaczyć? Potknę się trochę kodu, który nie może go obejść. Próbowałem już tylko h * 2 zamiast hprime, i po prostu w * 2 zamiast wprime. Za każdym razem mam ten sam kompilator (g ++ kompilator) Błąd:"nazwa zmiennej" nie może pojawić się w wyrażeniu stałym C++

grid.cpp: W konstruktorze ':: Siatka Siatka (int, int)':

grid.cpp: 34: error: „hprime "nie może pojawić się w stałej ekspresji

(kompilator nie zawsze mówi hprime, powie że cokolwiek tam jest, czy to h lub hprime czy szerokość). Każda pomoc będzie bardzo ceniona!

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

To nie wygląda to jeszcze musi być 'const'. Nie modyfikujesz go i jest to tylko zakres funkcji. –

Odpowiedz

22

Nie można używać new przeznaczyć dwuwymiarową tablicę, ale może zmienić linię naruszające takiego:

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

Jeśli nie mieć do być wielowymiarowym, możesz może zrobić:

grid = new int[wprime*hprime]; 

i tylko wskaźnik to jak

grid[A*wprime + B] 

gdzie normalnie wskaźnik to jak

grid[A][B] 
+0

Pracowałem, dziękuję. – Captaindh00m

+4

Możesz sortować-używać nowego, aby przydzielić tablicę dwuwymiarową, ale tylko pierwszy wymiar jest zmienny. 'new Grid [i] [3]' jest w porządku, 'new Grid [3] [i]' nie jest. Tak naprawdę przydzielasz jednowymiarową tablicę siatki [3], ale to wszystko jest wielowymiarową tablicą C/C++. –

Powiązane problemy