次のコードを検討してください。
template <typename T>
struct X{
struct Y{
unsigned i;
};
template<typename E>
struct Z : public Y {
unsigned foo(){
return i;
}
};
};
X
ネストされたクラスY
とを持つクラス テンプレートがありZ
ます。Z
もテンプレートであり、 から継承しY
ます。したがって、フィールドも継承しますi
。ただし、このコードはコンパイルされません。i
コンパイルでは、のfoo()
方法では解決できないと書かれていますZ
。i
明示的に接頭辞を付けるとthis->
、問題が解決します。
外側の type を削除するとX
、プレフィックスは不要になり、コードはそのまま正常にコンパイルされます。
ここでこの明示的なthis->
プレフィックスが必要なのはなぜですか?