我遇到了繼承問題。我創建了這個例子來顯示或多或少的問題。問題是,如果我公開從派生類公開派生出來,那麼我必須一直訪問原始類中的受保護成員。但是,當我使用模板時,這似乎不是這種情況。繼承不能像使用模板時那樣工作
事實上,下面的例子會在'n ++;'的行上抱怨。說'n'沒有在範圍內聲明。但是,如果我沒有使用模板。代碼編譯得很好。到底是怎麼回事?
#include<iostream>
template<typename T>
class base{
protected:
T n;
public:
T getn();
base();
};
template<typename T>
T base<T>::getn(){
return n;
}
template<typename T>
base<T>::base(){
n = 8;
}
template<typename T>
class daddy: public base<T>{
protected:
public:
};
template<typename T>
class granny: public daddy<T>{
protected:
public:
T plusone();
};
template<typename T>
T granny<T>::plusone(){
//this->n = this->n + 1;
n++;
return n;
}
int main(){
granny<int> oldmommy;
int su = oldmommy.getn();
std::cout << su << std::endl;
su = oldmommy.plusone();
std::cout << "plusone" << su << std::endl;
return 0;
}
Btw。告訴我是否應該發佈沒有模板的代碼進行比較..
謝謝tacp。我試圖弄清楚這一點。 – 2013-04-09 01:53:43
+1爲完整和短的測試案例。 – 2013-04-09 01:55:09
這裏有一個精確的解釋:http://stackoverflow.com/questions/7076169/not-declared-in-this-scope-error-with-templates-and-inheritance – Nbr44 2013-04-09 01:58:05