Я искал решение проблемы ниже по всему Интернету. Некоторые из приведенных решений - это именно то, что я делаю, но я все еще получаю сообщение об ошибке, когда пытаюсь скомпилировать свой код. Любая помощь будет принята с благодарностью.Вызов функции базового класса из объекта производного класса. Элементы данных базового класса, установленные в конструкторе производного класса
У меня есть базовый класс, который будет определять каждый класс монстров в моем коде. Вот базовый класс:
#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;
}
Теперь у меня есть класс монстра (здесь орка), который является производным от класса Stats. Конструктор класса монстра также вызывает перегруженный конструктор класса Stats:
#include <iostream>
#include "Stats.cpp"
class Orc: public Stats {
public:
Orc();
};
Orc::Orc() : Stats(8, 3, 1) {}
В основной функции я строй нового объекта орки и попытаться вызвать функцию статистику базового класса :: getArm() с объектом :
int main() {
Orc mork();
std::cout << "Armor: " << mork.Stats::getArm() << "\n";
}
Ожидается, что функция вернет значение int для брони. Вместо этого я получаю сообщение об ошибке:
ошибка: запрос члена «Статистика :: getArm» в «Mork», который относится к типу неклассовой «Орк()»
Кстати, я компиляция в C++ 11.
Вы не определяете создание экземпляра правильно. В основном вам нужно сделать орковскую морку; а затем вызовите mork.getArm(); Вероятно, вы хотите сделать getArm виртуальным. –
Возможный дубликат http://stackoverflow.com/questions/1424510/most-vexing-parse-why-doesnt-a-a-work – Ediac
Это работает. Спасибо. – Carlos