Я новичок в C++ и имеющий следующий вопрос:класс Child не является статическим членом родительского
У меня есть родительский класс, называемый Существо:
class Creature
{
public:
bool isActive;
std::string name;
int attackNumOfDice, attackNumOfSides,
defenseNumOfDice, defenseNumOfSides;
int armor, strength;
Creature();
//two virtual functions determine the damage points
virtual int attack();
virtual int defend();
void halveAttackDice();
void setStrength(int toSet);
void setStatus(bool activity);
};
и 5 дочерних классов, как так:
.h файл: файл
class Child : public Creature
{
int attack();
int defend();
}
реализация:
int Child::isActive = true;
std::string Child::name = "";
int Child::attackNumOfDice = 2;
...
int Child::attack()
{
...
}
intChild::defend()
{
...}
Однако, когда я пытаюсь скомпилировать, как это я получаю ту же ошибку для всех 5 дочерних классов:
child.cpp:6: error: ‘bool Child::isActive’ is not a static member of ‘class Child’
child.cpp:7: error: ‘std::string Child::name’ is not a static member of ‘class Child’
child.cpp:8: error: ‘int Child::attackNumOfDice’ is not a static member of ‘class Child’
...
Я не понимаю, почему говорят не статический член, когда я никогда не определил один ?
спасибо ... есть способ сделать это, используя только конструктор в классе родителя? в подсказке указывается, что должен быть только один конструктор –
да ... вы можете вызвать родительский конструктор из конструктора класса подкласса, используя этот sintax: Child :: Child(): Creature() {}. Вам просто нужно оставить свой конструктор подкласса пустым, и он запустит код, который существует в родительском конструкторе. –
Если вы пытаетесь инициализировать переменные в конструкторе, используйте список инициализаторов конструктора, вместо инструкций присваивания в теле конструктора. –