使用继承的受保护成员(C ++)时遇到问题

时间:2017-09-25 00:43:13

标签: c++ class inheritance protected

这是我遇到的问题。这是我的士兵课程:

#ifndef SOLDIER_H
#define SOLDIER_H

#include <iostream>

class Soldier{
protected:
    const int m_damage;
public:
    Soldier():
        m_damage(5)
    {}
};

#endif // SOLDIER_H

这是我的战士类,继承自它:

#ifndef WARRIOR_H
#define WARRIOR_H

#include "Soldier.h"

class Warrior: public Soldier{
public:
    Warrior():
        m_damage(10)
    {}
};

#endif // WARRIOR_H

问题是当我运行程序时,我收到此错误:

Warrior.h: In constructor 'Warrior::Warrior()':
Warrior.h:9:9: error: class 'Warrior' does not have any field named 'm_damage'
         m_damage(10)

看来,虽然我设置了

const int m_damage;

在Soldier类中受到保护并在Warrior类中公开继承它,我仍然无法访问它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

确实TabularInline没有成员Warrior。它属于m_damage,只有Soldier可以初始化它。

您应该允许Soldier构造函数将damage参数作为参数,并在构造基类时将Soldier所需的值传递给它。

m_damage