我无法理解如何让子类使用父类中的受保护成员。
假设在父类中,我有一个公共函数,它将设置data_parent,一个受保护的成员,等于某个值。
现在,在子类中,我有一个名为data_child的受保护成员,并且在公共中有一个函数,它将返回data_parent + data_child。
但是,当我尝试编译时,我收到错误"使用未声明的标识符' data_parent' &#34 ;.我做错了什么?
答案 0 :(得分:3)
我无法解释您的错误消息,除非您的代码与您的描述有所不同。
以下基本上是你所描述的,除了我添加了构造函数(可选),为成员函数选择了名称,并添加了一个驱动程序来测试。它没有错误。
#include <iostream>
class Parent
{
public:
Parent() : data_parent(0) {};
void SetDataParent(int x) {data_parent = x;};
protected:
int data_parent;
};
class Child: public Parent
{
public:
Child() : Parent(), data_child(0) {};
void SetDataChild(int x) {data_child = x;};
int GetSum() const {return data_child + data_parent;};
protected:
int data_child;
};
int main()
{
Child child;
child.SetDataParent(42);
child.SetDataChild(100);
std::cout << child.GetSum() << '\n';
}
我的猜测是你遗忘了Child
继承Parent
,导致家庭关系相当紧张。
答案 1 :(得分:0)
解决了这个问题。我没有意识到继承普通类和模板类之间存在差异。我需要包括
using Parent<type>::data_parent;