15

C++ で次のエラーが発生します。

エラー C2614: 'ChildClass': メンバーの初期化が無効です: 'var1' はベースまたはメンバーではありません

Class Base 
{
    protected:
    int var1;
public:
    Base()
    {
        var1=0;
    }
}


class Child : public Base
{
    int chld;
    public: 
    Child() : var1(0)
    {
        chld=1;
    }
}

私がやったことはOOプロトコルに従っていると感じています。これvar1は、アクセス指定子として保護された Base クラスのデータ メンバーです。そのため、継承することができ、子で非公開になります。

エラーが発生する理由がわかりませんか?

4

2 に答える 2

25

エラーメッセージが提供する正確な理由では機能しません。初期化子リストは、直接のメンバーまたは基本クラスでのみ使用できます。

あなたの場合、のコンストラクタによって呼び出され、 に設定されるvar1ため、を初期化する必要さえありません。Base::Base()Childvar10

別の値が必要な場合は、Baseコンストラクターをオーバーロードして明示的に呼び出す必要があります。

class Base 
{
protected:
     int var1;
public:
     Base() : var1(0)
     {
     }
     Base(int x) : var1(x)
     {
     }
};

class Child:public Base
{
    int chld;
public: 
    Child(): Base(42) , chld(1)
    {
    }
};
于 2012-04-13T09:34:15.483 に答える
6

基本クラスのメンバーを初期化することはできません。現在のクラスのメンバーのみです。基本クラスでパラメーター化されたコンストラクターを使用します。

Class Base 
{
  protected:
     int var1;
     Base( int var ) : var1(var)
     {}
  public:
     Base()
     {
        var1=0;
     }
};

class Child:public Base
{
      int chld;
   public: 
      Child():Base(0)
      {
         chld=1;
      }
};
于 2012-04-13T09:34:46.613 に答える