【发布时间】:2018-03-05 21:22:06
【问题描述】:
这是我遇到的问题。这是我的士兵课:
#ifndef SOLDIER_H
#define SOLDIER_H
#include <iostream>
class Soldier{
protected:
const int m_damage;
public:
Soldier():
m_damage(5)
{}
};
#endif // SOLDIER_H
这是我的 Warrior 类,继承自它:
#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 类中公开继承,我仍然无法访问它。任何帮助将不胜感激。
【问题讨论】:
-
构造函数不能初始化其他类的成员,甚至不能初始化基类的成员。这是基类的构造函数的责任。这与
m_damage受到保护无关。 -
只需提供
Soldier类可以使用的Soldier构造函数。 -
请不要在您的帖子上签名。您的帖子已经用您的用户卡“签名”了。
标签: c++ class inheritance protected