ZuuM Temat założony przez niniejszego użytkownika |
problem z macierza dynamiczną » 2009-10-03 21:11:07 Witam Serdecznie, mam problem z utworzeniem macierzy obiektów. Chcę, żeby tworzyć taką macierz dynamicznie podczas działania programu. Oto implementacja Klas class Kolor { private: float r; float g; float b; public: Kolor() { r = 0.0f; b = 0.0f; g = 0.0f; } Kolor( float red, float blue, float green ) { r = red; b = blue; g = green; } void UstawKolor( float red, float blue, float green ) { r = red; b = blue; g = green; } void PobierzKolor( float * red, float * blue, float * green ) { red =& r; blue =& b; green =& g; } }; class Mapa { private: Kolor ** mapa; unsigned int szerokosc; unsigned int wysokosc; public: Mapa() { szerokosc = 640; wysokosc = 480; mapa = new Kolor *[ wysokosc ]; for( int i = 0; i < wysokosc; i++ ) { mapa[ i ] = new Kolor[ szerokosc ]; } } Mapa( unsigned int szer, unsigned int wys ) { szerokosc = szer; wysokosc = wys; mapa = new Kolor *[ wysokosc ]; for( int i = 0; i < wysokosc; i++ ) { mapa[ i ] = new Kolor[ szerokosc ]; } } void RysujPixel( int x, int y, float r, float g, float b ) { mapa[ x ][ y ].UstawKolor( r, b, g ); glBegin( GL_POINTS ); glVertex2f(( - 1.0f +( x /( szerokosc / 2.0f ) ) ),( - 1.0f +( y /( wysokosc / 2.0f ) ) ) ); glEnd(); } void PobierzPixel( int x, int y, float * red, float * blue, float * green ) { mapa[ x ][ y ].PobierzKolor( red, blue, green ); } void WyczyscMape() { float r; float b; float g; for( int i = 0; i < wysokosc; i++ ) for( int j = 0; j < szerokosc; j++ ) mapa[ i ][ j ].UstawKolor( 0.0f, 0.0f, 0.0f ); mapa[ 0 ][ 0 ].PobierzKolor( & r, & b, & g ); glColor3f( r, g, b ); for( int i = 0; i < wysokosc; i++ ) for( int j = 0; j < szerokosc; j++ ) { glBegin( GL_POINTS ); glVertex2f(( - 1.0f +( i /( szerokosc / 2.0f ) ) ),( - 1.0f +( i /( wysokosc / 2.0f ) ) ) ); glEnd(); } } };
//zmieniłem kod klasy Mapa; |
|
DejaVu |
» 2009-10-05 18:36:18 std::vector < std::vector < Kolor > > mapa; |
|
ZuuM Temat założony przez niniejszego użytkownika |
» 2009-10-06 18:50:36 Wprowadziłem następujące zmiany w klasie: class Mapa { private: Kolor ** mapa; unsigned int szerokosc; unsigned int wysokosc; public: Mapa() { szerokosc = 640; wysokosc = 480; mapa = new Kolor *[ wysokosc ]; for( int i = 0; i < wysokosc; i++ ) { mapa[ i ] = new Kolor[ szerokosc ]; } } Mapa( unsigned int szer, unsigned int wys ) { szerokosc = szer; wysokosc = wys; mapa = new Kolor *[ wysokosc ]; for( int i = 0; i < wysokosc; i++ ) { mapa[ i ] = new Kolor[ szerokosc ]; } }
teraz jak w funkcji main tworzę obiekt typu Mapa to kompilator wyrzuca mi następujący error "conversion from 'Mapa*' to non-scalar type 'Mapa' requested" Oto w jaki sposób deklaruję obiekt: Mapa plansza = new Mapa( 255, 255 ); plansza.WyczyscMape();
Może mi ktoś powiedzieć dlaczego wyskakuje ten error i czy dobrze wywołuję metodę do klasy? |
|
Thud |
» 2009-10-06 19:21:10 Mapa * plansza = new Mapa( 255, 255 ); Narzuca mi się to. |
|
ZuuM Temat założony przez niniejszego użytkownika |
» 2009-10-06 19:57:49 tak też robiłem, ale wtedy wyświetla mi się inny komunikat tak jakbym nie zadeklarował funkcji WyczyscMape(); chociaż metoda jest w klasie i jest umieszczona w tym samym pliku co funkcja main(); |
|
Thud |
» 2009-10-06 20:02:55 |
|
ZuuM Temat założony przez niniejszego użytkownika |
» 2009-10-07 07:06:34 Wielkie dzięki. W takim razie powiedzcie mi czy dobrze myślę... Jeżeli tworzę nowy obiekt instrukcją new to muszę go przypisać do wskaźnika, a następnie jeżeli chcę wykorzystać tę zmienną to używam operatora "->"? Przez kropkę będę się odnosił jeżeli to będzie jakiś element struktury? Jeszcze raz dziękuję za odpowiedzi. Pozdrawiam |
|
DejaVu |
» 2009-10-07 15:19:25 |
|
« 1 » 2 |