не могу заставить подклассы работать должным образом

Я делаю простую текстовую файтинговую игру, и у меня много проблем с тем, чтобы заставить мои подклассы работать.

из многих ошибок, которые я получаю, наиболее стойким является то, что «наше определение линии« Гном »не соответствует ни одному объявлению« Гном »

#include <iostream>
using namespace std;

class Poke{
protected:
string race;
int health, damage, shield;
public:
Poke();
Poke(int health, int damage, int shield);
virtual int attack(Poke*);
virtual int defend(Poke*);
virtual int getHealth();
};

это один подкласс разных рас, еще 2 с разными уровнями атаки / здоровья / щита

// Dwarf: High health, Low attack, High defense
class Dwarf: public Poke {
public:
string race = "Dwarf";
int attack(Poke*);
int defend(Poke*);
int getHealth();

};

.CPP V

//DWARF
Dwarf::Dwarf(int health, int damage, int shield) {
this->health = 100;
this->damage = 50;
this->shield = 75;
};

//attack
int Poke:: attack(Poke*){
if (shield > (damage + rand() % 75)){
cout << "Direct Hit! you did" << (health - damage) << "points of damage";
}
else {std::cout << "MISS!"<<;
}
return 0;
};

int Poke:: attack(Poke*){
Enemy this->damage ;
};

я использую класс игрока для человека, который играет в игру, которая будет использовать «Poke»

class Player{
int wins, defeats, currentHealth;
string name;
Poke race;
bool subscribed;
public:
Player(int wins, int defeats, int currentHealth);
int addWins();
int addDefeats();
int getWins();
int getDefeats();
int getHealth();};

.CPP V

//getHealth
int Player::getHealth(){
return this->currentHealth;
};

а и «вражеский» класс для компьютерного противника:

class Enemy{
int eHealth;
Poke eRace;
public:
Enemy (int eHealth, Poke eRace);
int getEHealth;
};

.CPP V

int Enemy:: getEHealth(){
return this->eHealth;
};

Любая помощь приветствуется!!

0

Решение

Конструкторы не наследуются. Вы должны будете объявить Dwarf Конструктор, который соответствует вашему определению.

Я думаю, что у вас также будут проблемы с этим:

string race = "Dwarf";

Вы не можете инициализировать учеников таким образом. Он должен быть инициализирован в конструкторе.

Редактировать:

Вы, кажется, не понимаете, что я имею в виду под декларацией. Измени свой Dwarf Объявление класса выглядит примерно так:

// Dwarf: High health, Low attack, High defense
class Dwarf: public Poke {
public:
string race;

Dwarf(int health, int damage, int shield); // <-- constructor declaration
int attack(Poke*);
int defend(Poke*);
int getHealth();

};

Изменить 2:

Ваш Dwarf конструктор должен также вызвать Poke конструктор, вот так:

Dwarf::Dwarf(int health, int damage, int shield) :
Poke(health, damage, shield),
race("Dwarf")
{
// Nothing needed here.
};
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]