継承に問題があります。この例を作成して、私の問題を多かれ少なかれ示しました。問題は、クラスから公に派生するクラスから公に派生する場合、元のクラスの保護されたメンバーにずっとアクセスできる必要があるということです。ただし、テンプレートを使用している場合はそうではないようです。
実際、以下の例では、「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;
}
ところで。比較するテンプレートなしでコードを投稿する必要があるかどうか教えてください..