11

現在、 classAから継承するクラスがあり、デフォルトのコンストラクターはBありBません。のコンストラクターAとまったく同じパラメーターを持つコンストラクターを作成しようとしていますB

struct B {
  int n;
  B(int i) : n(i) {}
};

struct A : B {
  A(int i) {
    // ...
  }
}; 

しかし、私は得る:

error: no matching function for call to ‘B::B()’
note: candidates are: B::B(int)

このエラーを修正するにはどうすればよいですか?

4

2 に答える 2

23

コンストラクターは次のようになります。

A(int i) : B(i) {}

コロンの後のビットは、「コンストラクターを使用して、このオブジェクトの B 基本クラス サブオブジェクトをint値 i で初期化する」ことを意味します。

B の初期化子を提供しなかったため、デフォルトでは、コンパイラは存在しない引数なし​​のコンストラクターで初期化しようとします。

于 2010-09-15T01:59:39.027 に答える
9

クラスの初期化子リストを介して基本コンストラクターを呼び出す必要があります。

例:

class C : public B
{
public:
    C(int x) : B(x)
    {
    }

};

B を明示的に初期化しない場合、パラメーターを持たないデフォルトのコンストラクターを使用しようとします。

于 2010-09-15T01:59:01.557 に答える