Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

problem z macierza dynamiczną

Ostatnio zmodyfikowano 2009-10-05 21:22
Autor Wiadomość
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
C/C++
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;
P-10613
DejaVu
» 2009-10-05 18:36:18
std::vector < std::vector < Kolor > > mapa;
P-10650
ZuuM
Temat założony przez niniejszego użytkownika
» 2009-10-06 18:50:36
Wprowadziłem następujące zmiany w klasie:

C/C++
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:
C/C++
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?
P-10661
Thud
» 2009-10-06 19:21:10
Mapa * plansza = new Mapa( 255, 255 );
Narzuca mi się to.
P-10662
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();
P-10664
Thud
» 2009-10-06 20:02:55
plansza->WyczyscMape();
P-10665
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
P-10683
DejaVu
» 2009-10-07 15:19:25
http://kursy.ddt.pl/?LessonId=20 - sekcje 15.6. i 15.7.
P-10689
« 1 » 2
  Strona 1 z 2 Następna strona