我無法理解如何讓子類使用父類中的受保護成員。使用受保護的成員
假設在父類中,我有一個公共函數,它將data_parent設置爲受保護成員,等於某個值。
現在,在子類中,我有一個名爲data_child的受保護成員,並且有一個公共函數,它將返回data_parent + data_child。
但是,當我嘗試編譯時,收到錯誤「使用未聲明的標識符'data_parent'」。我究竟做錯了什麼?
我無法理解如何讓子類使用父類中的受保護成員。使用受保護的成員
假設在父類中,我有一個公共函數,它將data_parent設置爲受保護成員,等於某個值。
現在,在子類中,我有一個名爲data_child的受保護成員,並且有一個公共函數,它將返回data_parent + data_child。
但是,當我嘗試編譯時,收到錯誤「使用未聲明的標識符'data_parent'」。我究竟做錯了什麼?
我無法解釋您的錯誤消息,只是您的代碼與您的描述有所不同。
以下基本上是你所描述的,除了我添加了構造函數(這是可選的),選擇了成員函數的名字,並添加了一個驅動程序來測試。它工作沒有錯誤。
#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
,使得在相當緊張的家庭關係。
這個答案對這個星球上的每個被收養的孩子都是非常冒犯的。 – 2015-04-05 00:50:38
解決了這個問題。我沒有意識到從普通類和模板類繼承之間是有區別的。我需要包括
using Parent<type>::data_parent;
或寫'this-> data_parent'。 – 2015-04-05 00:51:04
這是你遺漏的一個關鍵信息......基類是模板專業化。 – Peter 2015-04-05 07:12:34
顯示效果會更好 – 2015-04-04 23:29:40
實際代碼請張貼[MCVE(http://www.stackoverflow.com/help/mcve)。錯誤提示沒有這樣的變量'data_parent' ... – Barry 2015-04-04 23:29:44
請提供您嘗試運行的代碼。沒有代碼,我們無法理解你的意思。 – 2015-04-04 23:55:08