2

次のコードを検討してください。

  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()方法では解決できないと書かれていますZi明示的に接頭辞を付けるとthis->、問題が解決します。

外側の type を削除するとX、プレフィックスは不要になり、コードはそのまま正常にコンパイルされます。

ここでこの明示的なthis->プレフィックスが必要なのはなぜですか?

4

0 に答える 0