从派生类对象调用基类函数。基类数据成员在派生类构造函数中设置

时间:2015-07-07 22:38:10

标签: c++ c++11 most-vexing-parse

我已经在互联网上寻找解决问题的方法。给出的一些解决方案正是我正在做的,但是当我尝试编译代码时,我仍然遇到错误。任何帮助将不胜感激。

我有一个基类Stats,我的代码中的每个怪物类都将派生自。这是基类:

this

现在我有一个怪物类(这里是Orc),它来自Stats类。 monster类的构造函数也调用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;
}

在main函数中,我构建了一个新的Orc对象,并尝试使用对象调用基类函数Stats :: getArm():

#include <iostream>
#include "Stats.cpp"

class Orc: public Stats {
    public:
        Orc();
};

Orc::Orc() : Stats(8, 3, 1) {}

我希望函数返回armor的int值。相反,我得到错误:

错误:请求'mork'中的成员'Stats :: getArm',这是非类型的'Orc()'

顺便说一句,我正在编译c ++ 11。

1 个答案:

答案 0 :(得分:3)

Orc mork();

此行不符合您的想法。你打算输入:

Orc mork;

哪个会声明一个名为Orc的{​​{1}}对象。相反,您声明了一个名为mork的函数,该函数不带参数并返回mork