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();
}
………………….