To jest w DLL'ce
class DLL_API Creature
{
protected:
int HP;
int MP;
char* name;
public:
virtual void attack(Creature*)=0;
};
class DLL_API Monster : public Creature
{
int exp;
public:
Monster(char*, int, int);
void attack(Creature*);
};
class DLL_API Hero : public Creature
{
public:
Hero(char *, int, int, int);
};
W pliku kożystającym z DLL
int main()
{
Creature *c1 = new Monster("Belzebub", 30, 200);
Creature *c2 = new Monster("Jozin", 10, 10);
c1->attack(c2);
system("pause");
}
Obiekty się tworzą, ale przy wykonywaniu attack() wyrzuca mi wywołanie Pure Virtual'ki, która przecież jest przesłonięta ;/
W exeku bez dll, deklaracja klasy:
class Creature
{
protected:
int HP;
int MP;
char* name;
public:
virtual void attack(Creature*)=0;
char* getName() { return name; };
};
class Monster : public Creature
{
int exp;
public:
Monster(char*, int, int);
void attack(Creature*);
};
class Hero : public Creature
{
public:
Hero(char *, int, int, int);
};
a potem w mainie:
int main()
{
Creature *c1 = new Monster("Wilk", 10, 30);
Creature *c2 = new Monster("Sokol", 50, 30);
c1->attack(c2);
system("PAUSE");
return 0;
}