我遇到了继承问题。我创建了这个例子来显示或多或少的问题。问题是,如果我公开从派生类公开派生出来,那么我必须一直访问原始类中的受保护成员。但是,当我使用模板时,这似乎不是这种情况。继承不能像使用模板时那样工作
事实上,下面的例子会在'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