1

テンプレートの基本クラスがあります。

template<class KeyF>
class Base 
{
  private:
   int member1;
   char member2;
   ....
};

上記のクラスから別のクラスを派生させました。

template<class KeyF>
class Derived : public Base<KeyF>
{
  public:
  void func1() {
    <accessing member1/member2>
  }

  ....
};

上記のコードは gcc でコンパイルされません。member1 は Derived のメンバーではないと言っています。しかし、すでに基本クラスから派生しているのに、なぜそのメンバーにアクセスできないのでしょうか?

4

4 に答える 4

3

のメンバーはBaseですprivateprivate membersこのクラス以外のクラスにアクセスすることはできません( を除くfriend)。それらを作るprotected、または作るprotected getters

于 2012-09-20T14:22:51.330 に答える
1

保護してみましたか?私はC++に深く関わっていたので、少し経ちました...

于 2012-09-20T14:24:25.683 に答える
1

基本メンバー名の前にthis->または、を付けるか、クラスに宣言をBase<KeyF>::追加してそれらを再表示する必要があります。usingそれらの名前は従属名であり、非表示になっています。

于 2012-09-20T14:25:35.097 に答える