C++ 从派生类对象调用基类函数。派生类构造函数中的基类数据成员集

C++ 从派生类对象调用基类函数。派生类构造函数中的基类数据成员集,c++,c++11,most-vexing-parse,C++,C++11,Most Vexing Parse,我在互联网上到处寻找下面这个问题的解决方案。给出的一些解决方案正是我正在做的,但当我试图编译代码时,仍然会遇到错误。任何帮助都将不胜感激 我有一个基类统计数据,我代码中的每个怪物类都将从中派生。下面是基类: #include <iostream> class Stats { private: int hitpoints; int armor; int bonus; public: int getHP()

我在互联网上到处寻找下面这个问题的解决方案。给出的一些解决方案正是我正在做的,但当我试图编译代码时,仍然会遇到错误。任何帮助都将不胜感激

我有一个基类统计数据,我代码中的每个怪物类都将从中派生。下面是基类:

#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;
}
#包括
班级统计{
私人:
int生命点;
内部装甲;
积分奖金;
公众:
int getHP(){return hitpoints;}
int getArm(){return armor;}
int getBonus(){return bonus;}
统计数据();
统计数据(int,int,int);
};
Stats::Stats(){
生命值=0;
装甲=0;
奖金=0;
}
Stats::Stats(inthp、intarm、intbon){
生命值=生命值;
装甲=手臂;
奖金=苯教;
}
现在我有了一个怪物类(这里是兽人),它来自统计类。monster类的构造函数还调用Stats类的重载构造函数:

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

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

Orc::Orc() : Stats(8, 3, 1) {}
#包括
#包括“Stats.cpp”
兽人等级:公共统计{
公众:
Orc();
};
Orc::Orc():Stats(8,3,1){
在主函数中,我构建了一个新的Orc对象,并尝试使用以下对象调用基类函数Stats::getArm():

int main() {
    Orc mork();
    std::cout << "Armor: " << mork.Stats::getArm() << "\n";
}
intmain(){
Orc mork();
标准::cout
此行与您认为的不同。您的意思是键入:

Orc mork;
它将声明一个名为
mork
Orc
对象。相反,您声明了一个名为
mork
的函数,该函数不带任何参数并返回一个
Orc

此行与您认为的不同。您的意思是键入:

Orc mork;
它将声明一个名为
mork
Orc
对象。相反,您声明了一个名为
mork
的函数,该函数不带任何参数并返回一个
Orc

此行与您认为的不同。您的意思是键入:

Orc mork;
它将声明一个名为
mork
Orc
对象。相反,您声明了一个名为
mork
的函数,该函数不带任何参数并返回一个
Orc

此行与您认为的不同。您的意思是键入:

Orc mork;

它将声明一个名为
mork
Orc
对象。相反,您声明了一个名为
mork
的函数,该函数不带任何参数,并返回一个
Orc

您没有正确定义实例化。主要是,您必须执行Orc-mork;然后调用mork.getArm();您可能希望使getArm成为虚拟的。这可能会重复。谢谢。您没有正确定义实例化。大体上,您必须执行Orc mork;然后调用mork.getArm();您可能希望使getArm成为虚拟的。这可能会重复。谢谢。您没有正确定义实例化。大体上,您必须执行Orc mork;然后调用mork.getArm();您可能希望使getArm成为虚拟的。这可能会重复。谢谢。您没有正确定义实例化。大体上,您必须执行Orc mork;然后调用mork.getArm();您可能想使getArm成为虚拟的。这可能会重复。谢谢。哦,天哪。Face palm。谢谢您指出我的愚蠢错误。@Carlos既然您使用的是C++11,就要养成使用
{}的习惯
用于初始化。这样可以避免出现此问题。哦,天哪,Face palm。谢谢你指出我的愚蠢错误。@Carlos既然你使用的是C++11,那就养成使用
{}的习惯吧
用于初始化。这样可以避免出现此问题。哦,天哪,Face palm。谢谢你指出我的愚蠢错误。@Carlos既然你使用的是C++11,那就养成使用
{}的习惯吧
用于初始化。这样可以避免出现此问题。哦,天哪,掌心。谢谢你指出我的愚蠢错误。@卡洛斯,既然你使用的是C++11,就养成使用
{}
进行初始化的习惯。这样可以避免出现此问题。