TeoTN Opublikowano 2 Maja 2009 Opublikowano 2 Maja 2009 Czy jest możliwe przypisanie wskaźnika do tablicy, o tak: for (int y=0; y<=2; y++) { for (int x=0; x<=2; x++) { POLE* p[x][y] = new POLE(x,y); } } ??? Bo mi wywala "variable-sized object `p' may not be initialized " -.- PS chcę utworzyć 9 obiektów przy okazji umieszczając je na tablicy 3x3 i podając im ich współrzędne
Egzekutor Opublikowano 2 Maja 2009 Opublikowano 2 Maja 2009 Jest możliwe np. double *tablica[5]; Nie wiem dlaczego wywala ci błąd EDIT: Nie znam się dobrze na c++ ale może to wina gwiazdki, że nie jest przy P tylko przy POLE
TeoTN Opublikowano 2 Maja 2009 Autor Opublikowano 2 Maja 2009 Dla zwykłych zmiennych wskaźniki mi działają, ale nie mogę utworzyć wskaźnika na obiekt w tablicy.
Konrad-GM Opublikowano 2 Maja 2009 Opublikowano 2 Maja 2009 Hmmm, Czy nie powinno to wyglądać tak? for (int y=0; y<=2; y++) { for (int x=0; x<=2; x++) { POLE* p = new POLE(x,y); } } ? Nie mam pojęcia jak wygląda struktura POLE, i do czego ma to służyć. Btw. Jak ma utworzyć wskaźnik którego wielkość wynosi 0?? Chociażby w tym: for (int y=0; y<=2; y++)
TeoTN Opublikowano 2 Maja 2009 Autor Opublikowano 2 Maja 2009 class POLE { private: int x, y; zawartosc w; public: POLE(int xx,int yy) {x=xx; y=yy;} int getx() {return x;} int gety() {return y;} int getw() {return w;} }; Tą podwójną pętlą chcę utworzyć tablicę wskaźników na 9 obiektów :) Więc. W x=0,y=0 (inaczej mówiąc p[0][0]) znajdzie się 1szy objekt o zmiennych x=0, y=0. W p[0][1] obiekt o zmiennych x=0,y=1 itd, itd.
Crackkk-GM Opublikowano 2 Maja 2009 Opublikowano 2 Maja 2009 for (int y=0; y<=2; y++) { for (int x=0; x<=2; x++) { POLE* p = new POLE; p->POLE( x, y ); } } Można inaczej ;D
TeoTN Opublikowano 2 Maja 2009 Autor Opublikowano 2 Maja 2009 emmm... a czy to nie sprawi, że zmienna p będzie kryła wskaźnik do pierwszego obiektu, potem zostanie nadpisana wskaźnikiem do drugiego, itd!? I skoro p to wskaźnik na obiekt, to czy nie powinno być p->x miast p.x?
Crackkk-GM Opublikowano 2 Maja 2009 Opublikowano 2 Maja 2009 A wcześniej jak było? Na to samo wychodzi ;o tak, tak, -> pomyliło mi się ;d, poprawię.
TeoTN Opublikowano 2 Maja 2009 Autor Opublikowano 2 Maja 2009 POLE* p[x][y] = new POLE(x,y); Tutaj mam (teoretycznie) tablicę od p[0][0] do p[2][2] co daje 9 elementów. Skoro idziemy w pętli, to powinno być 9 wskaźników (p[0][0], p[0][1], p[0][2], p[1][0] ...) do 9 obiektów. A o ile mnie wzrok nie myli to Twój kod tworzy JEDEN wskaźnik i 9 obiektów :) W efekcie dla pozostałych linijek kodu (po pętlach) pozostanie w spadku wskaźnik p do obiektu nr. 9, a pozostałe 8 to sierotki ;) Czyż nie tak?
Crackkk-GM Opublikowano 2 Maja 2009 Opublikowano 2 Maja 2009 Wg. twojej klasy niepotrzebna jest tablica dwuwymiarowa: POLE* p = new POLE( x, y ); No i jak będziesz chciał pozycję z p[2][1] to wyjdzie to samo co z p[2][2]. kod konrada powinien być prawidłowy o_O
TeoTN Opublikowano 2 Maja 2009 Autor Opublikowano 2 Maja 2009 Okej, a jak potem wywołać obiekt o np. x=2, y=1??? Bo przysiągłbym, że tym sposobem utworzysz 9 obiektów i jeden wskaźnik :/ To jest poprawne: int x=2,y=2; POLE *p[x][y]; for(int i=0;i<x;i++) { for(int i2=0;i2<y;i2++) p[i][i2]=new POLE(x,y); } kolega mi pomógł :) Ale i tak dzięki wszystkim :)
Rekomendowane odpowiedzi