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

[Allegro5] Klasa i wskaźniki

Ostatnio zmodyfikowano 2010-02-09 23:56
Autor Wiadomość
steckel
Temat założony przez niniejszego użytkownika
[Allegro5] Klasa i wskaźniki
» 2010-02-09 18:14:34
Witam!
Mam taką klasę:
C/C++
class Czcionka {
public:
    ALLEGRO_FONT * font;
    ALLEGRO_COLOR kolor;
    Czcionka() {
        font = al_load_ttf_font( "times.ttf", 20, 0 );
        kolor = al_map_rgb( 255, 255, 255 );
    }
    Czcionka( std::string napis, int wielkosc, ALLEGRO_COLOR zkolor ) {
        font = al_load_ttf_font( napis.c_str(), wielkosc, 0 ) );
        kolor = zkolor;
    }
    Czcionka( const Czcionka & czcionka ) {
        font = czcionka.font;
        kolor = czcionka.kolor;
    }
    ~Czcionka() {
        al_destroy_font( font );
    }
    void Napisz( std::string napis, int x, int y, int flagi ) {
        al_set_blender( ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA, kolor );
        al_draw_text( font, x, y, flagi, napis.c_str() );
    }
};
Po wykonaniu instrukcji:
C/C++
Czcionka font = Czcionka( "times.ttf", 20, al_map_rgb( 0, 0, 255 ) );
font.Napisz( "aaaaaa", 50, 50, 0 );
Program się wysypuje, bo mam problem ze wskaźnikiem. Czy ktoś potrafi temu zaradzić, aby wskaźnik prawidłowo się tworzył i niszczył?
P-13690
malan
» 2010-02-09 18:27:26
<< delete >>
Radziłbym Ci zmienić nazwę tego obiektu, bo jeszcze potem jakieś problemy będziesz miał.
P-13691
steckel
Temat założony przez niniejszego użytkownika
» 2010-02-09 18:40:07
Chodziło mi o wskaźnik na czcionkę wbudowany w allegro5:
C/C++
ALLEGRO_FONT * font;
P-13693
Elaine
» 2010-02-09 18:51:26
Tak, ktoś potrafi.
P-13694
DejaVu
» 2010-02-09 19:11:05
sprawdzaj czy wskaźnik!=NULL zanim zaczniesz cokolwiek z nim robić.
P-13700
Elaine
» 2010-02-09 19:29:40
To nic nie da, bo nie o null pointer dereference tu chodzi.
P-13701
steckel
Temat założony przez niniejszego użytkownika
» 2010-02-09 19:32:32
Zmodyfikowałem funkcję rysuj:
C/C++
void Napisz( std::string napis, int x, int y, int flagi ) {
    if( font != NULL ) {
        al_set_blender( ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA, kolor );
        al_draw_text( font, x, y, flagi, napis.c_str() );
    }
C/C++
void Napisz( std::string napis, int x, int y, int flagi ) {
    if( & font != NULL ) {
        al_set_blender( ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA, kolor );
        al_draw_text( font, x, y, flagi, napis.c_str() );
    }
W destruktorze zrobiłem to samo i obie wersje nie działają. Po za tym nie chcę dopuścić do sytuacji, kiedy wskaźnik będzie miał wartość NULL. Wszystko działa jeśli destruktor skomentuję, ale wtedy będę miał wycieki pamięci.
P-13703
DejaVu
» 2010-02-09 19:41:27
Spróbuj więc nie używać konstruktora kopiującego i sprawdź czy działa.
P-13705
« 1 » 2 3
  Strona 1 z 3 Następna strona