Вызов функции базового класса из объекта производного класса. Члены базового класса, установленные в конструкторе производного класса

Я искал решение проблемы ниже по всему интернету. Некоторые из приведенных решений - именно то, что я делаю, но я все еще получаю ошибку, когда пытаюсь скомпилировать свой код. Любая помощь будет принята с благодарностью.

У меня есть базовый класс 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,

Другие вопросы по тегам