Вызов функции базового класса из объекта производного класса. Члены базового класса, установленные в конструкторе производного класса
Я искал решение проблемы ниже по всему интернету. Некоторые из приведенных решений - именно то, что я делаю, но я все еще получаю ошибку, когда пытаюсь скомпилировать свой код. Любая помощь будет принята с благодарностью.
У меня есть базовый класс Stats, из которого будет получен каждый класс монстров в моем коде. Вот базовый класс:
#include <iostream>
class Stats {
private:
int hitpoints;
int armor;
int bonus;
public:
int getHP(){return hitpoints;}
int getArm(){return armor;}
int getBonus(){return bonus;}
Stats();
Stats(int, int, int);
};
Stats::Stats() {
hitpoints = 0;
armor = 0;
bonus = 0;
}
Stats::Stats(int hp, int arm, int bon) {
hitpoints = hp;
armor = arm;
bonus = bon;
}
Теперь у меня есть класс монстров (здесь Orc), который является производным от класса Stats. Конструктор класса monster также вызывает перегруженный конструктор класса Stats:
#include <iostream>
#include "Stats.cpp"
class Orc: public Stats {
public:
Orc();
};
Orc::Orc() : Stats(8, 3, 1) {}
В основной функции я создаю новый объект Orc и пытаюсь вызвать функцию базового класса Stats::getArm() с объектом:
int main() {
Orc mork();
std::cout << "Armor: " << mork.Stats::getArm() << "\n";
}
Я ожидаю, что функция вернет значение int для брони. Вместо этого я получаю ошибку:
ошибка: запрос на член 'Stats:: getArm' в 'mork', который имеет неклассовый тип 'Orc()'
Кстати, я компилирую в C++11.
1 ответ
Orc mork();
Эта строка не делает то, что вы думаете, что делает. Вы хотели напечатать:
Orc mork;
Который объявил бы Orc
названный объект mork
, Вместо этого вы объявили функцию с именем mork
который не принимает аргументов и возвращает Orc
,