2015-07-07 2 views
0

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

У меня есть базовый класс, который будет определять каждый класс монстров в моем коде. Вот базовый класс:

#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.

+0

Вы не определяете создание экземпляра правильно. В основном вам нужно сделать орковскую морку; а затем вызовите mork.getArm(); Вероятно, вы хотите сделать getArm виртуальным. –

+1

Возможный дубликат http://stackoverflow.com/questions/1424510/most-vexing-parse-why-doesnt-a-a-work – Ediac

+0

Это работает. Спасибо. – Carlos

ответ

3
Orc mork(); 

Эта линия не делает то, что вы думаете о ней. Вы имели в виду ввести:

Orc mork; 

Какой бы объявить Orc объект с именем mork. Вместо этого вы объявили функцию с именем mork, которая не принимает аргументов и возвращает Orc.

+0

Oh geez. Лицевая ладонь. Спасибо, что указали на мою тупую ошибку. – Carlos

+1

@ Карлос, так как вы используете C++ 11, привыкните использовать '{}' для инициализации. Это позволит избежать возможности возникновения этой проблемы. –

Смежные вопросы