使用继承的受保护成员(C )发行问题
Having issue using inherited protected member (C++)
这是我遇到的问题。这是我的士兵课:
#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;
在士兵班上受到保护,并在战士班上公开继承它,我仍然无法访问它。任何帮助将不胜感激。
是正确的 Warrior
没有成员m_damage
。它属于Soldier
,只有Soldier
才能初始化它。
您应该允许Soldier
s构造器将损坏参数作为参数,并在构造基本类时将m_damage
的值传递给它。
#include <iostream>
class Soldier{
protected:
const int m_damage;
public:
// explicit will prevent implicit conversions from
// being permitted when constructing Soldier
// see http://en.cppreference.com/w/cpp/language/explicit
explicit Soldier(int damage=5):
m_damage(damage)
{}
int damage() const
{
return m_damage;
}
};
class Warrior: public Soldier{
public:
Warrior()
: Soldier(10)
{}
};
// lets make another subclass which implicitly uses the
// default Soldier constructor.
class Samurai: public Soldier{
public:
Samurai()
{}
};
int main(){
Warrior w;
Samurai s;
std::cout << w.damage() << 'n';
std::cout << s.damage() << 'n';
}
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- constexpr构造函数需要常量成员函数时出现问题
- 使用静态成员声明类时遇到问题
- 尝试将向量初始化为类成员时出现问题
- 当成员值从指针更改为非指针时,C++常量问题
- 常量公共成员有什么问题?
- 修改C++结构的特征成员时出现问题
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 成员函数中的迭代器出现问题
- 为什么在分配给成员变量之前获取unique_ptr的返回是一个问题?
- 没有'str'成员在 GCC 和 Clang 'std::basic_ostream<char>',但 MSVC 没有问题
- 关于在成员重载中使用 std::move() 的问题
- 在C++中实现类似 python "map"函数的问题:调用类成员函数
- 消除 C++ 中的菱形问题以访问顶级成员
- 使用 Swig 在成员中包装具有互斥锁的 C++ 类时出现问题
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- OpenCV C++ Mat 类行和列 - 它们是成员变量(和相关问题)吗?
- C++关于类成员的问题
- 遇到C++方形类的问题. 成员函数实现和声明
- 问题:成员与读/写