dziedziczenie - co jest zle ?

0

pisze gre z wykorzystaniem biblioteki allegro, ale siedze juz dzis nad nia kilka godzin i w tej chwili już mi się wszystko pomieszało i nie widzę błędu - może wy mi pomożecie ?

Podczas kompilacji wyskakuje błąd: [Linker error] undefined reference to `mag::~mag()'

Wklejam kod mojej gry związany z klasami:


class postac
{
private:
      int zdrowie;
      int pieniadze;
      int sila;
      int uzbrojenie;   
public:
      postac (){zdrowie=0, pieniadze=0, sila=0, uzbrojenie=0;}  
      postac(int a, int b, int c, int d);       
      void zmiana_pieniadze(int x);
      void zmiana_zdrowie(int x);
      void zmiana_uzbrojenie(int x);
      void zmiana_sila(int x);
      int zobacz_pieniadze();
      int zobacz_zdrowie();
      int zobacz_uzbrojenie();
      int zobacz_sila(); 
      friend void walka_koncowa(postac &g1, postac &g2);    
      ~postac();  
};


class lepsza_postac : public postac
{
private:
      
      int id_klasy; 
public:
      lepsza_postac(){id_klasy=0;};  
      void zmiana_id_klasy(int x);
      int zobacz_id_klasy();    
      ~lepsza_postac();    
};

class mag : public lepsza_postac
{
private:
      int magia;
      
public:
      mag(){magia = 0;};
      
      void zmiana_magia(int x);
      int zobacz_magia();
      ~mag();
};


postac::postac(int a, int b, int c, int d)
{                 
    zdrowie = a;
    pieniadze = b;
    sila = c;
    uzbrojenie = d;                              
}

postac::~postac(){}

lepsza_postac::~lepsza_postac(){}             
                      
void postac::zmiana_pieniadze(int x)
{
    pieniadze = pieniadze + x;           
}
       
void postac::zmiana_zdrowie(int x)
{
    zdrowie = zdrowie + x;           
}
                 
void postac::zmiana_uzbrojenie(int x)
{
    uzbrojenie = uzbrojenie + x;           
}
                 
void postac::zmiana_sila(int x)
{
    sila = sila + x;           
}  
       
int postac::zobacz_pieniadze()
{
    return pieniadze;
}
       
int postac::zobacz_zdrowie()
{           
    return zdrowie;
}
          
int postac::zobacz_uzbrojenie()
{           
    return uzbrojenie;
}     
      
int postac::zobacz_sila()
{           
    return sila;
}  

void lepsza_postac::zmiana_id_klasy(int x)
{
     id_klasy=x;
}

int lepsza_postac::zobacz_id_klasy()
{
    return id_klasy;
}


void mag::zmiana_magia(int x)
{
    magia=magia+x;
}

int mag::zobacz_magia()
{
    return magia;
}

kod zwiazany z wykorzystaniem klas



postac gracz(100,500,20,20);  
postac stwor(100,100,21,20);
lepsza_postac nowy_gracz;

…………………..

nowy_gracz.postac::zmiana_zdrowie(gracz.zobacz_zdrowie()+stwor.zobacz_zdrowie());
        nowy_gracz.postac::zmiana_pieniadze(gracz.zobacz_pieniadze()+stwor.zobacz_pieniadze());
        nowy_gracz.postac::zmiana_sila(gracz.zobacz_sila()+stwor.zobacz_sila());
        nowy_gracz.postac::zmiana_uzbrojenie(gracz.zobacz_uzbrojenie()+stwor.zobacz_uzbrojenie());  

……………………………

if(key[KEY_C])
{
              nowy_gracz.lepsza_postac::zmiana_id_klasy(1);
              
}

………………

if(nowy_gracz.lepsza_postac::zobacz_id_klasy()==1)
{
clear_to_color(bufor,makecol(255,255,255)); //czyszczenie bufora na kolor biały
blit(plansza_czarodziej,bufor,0,0,0,0,plansza_czarodziej->w,plansza_czarodziej->h);  //rysowanie planszy w buforze
blit(pionek,bufor,0,0,250,200,pionek->w,pionek->h);  //rysowanie pionka w buforze-"x" i "y"
textprintf_ex(bufor, font, 472, 508, makecol(0, 0, 0), -1, "Bedziesz czarodziejem.");
mag czarodziej;

czarodziej.lepsza_postac::zmiana_zdrowie(nowy_gracz.postac::zobacz_zdrowie());
czarodziej.lepsza_postac::zmiana_pieniadze(nowy_gracz.zobacz_pieniadze());
czarodziej.lepsza_postac::zmiana_sila(nowy_gracz.postac::zobacz_sila());
czarodziej.lepsza_postac::zmiana_uzbrojenie(nowy_gracz.postac::zobacz_uzbrojenie());
czarodziej.zmiana_magia(10);
ruchy=3;
textprintf_ex(bufor, font, 413, 721, makecol(0, 0, 0), -1, "%d", czarodziej.lepsza_postac::zobacz_zdrowie());
textprintf_ex(bufor, font, 645, 714, makecol(0, 0, 0), -1, "%d", czarodziej.lepsza_postac::zobacz_pieniadze());
textprintf_ex(bufor, font, 110, 640, makecol(0, 0, 0), -1, "%d", czarodziej.lepsza_postac::zobacz_sila());
textprintf_ex(bufor, font, 110, 725, makecol(0, 0, 0), -1, "%d", czarodziej.lepsza_postac::zobacz_uzbrojenie());
textprintf_ex(bufor, font, 110, 825, makecol(0, 0, 0), -1, "%d", czarodziej.zobacz_magia());
textprintf_ex(bufor, font, 509, 721, makecol(0, 0, 0), -1, "%d", ruchy);  
blit(bufor,screen,0,0,0,0,SCREEN_W,SCREEN_H);  //wyswietla zawartosc bufora na ekran
readkey(); 
}                                               

………………….

0

Nie mogę znaleźć definicji destruktora klasy mag.

0

no tak dzieki wielkie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1