比較的深いクラス階層構造を記述しようとしているのですが、コンパイラが「[ベース クラスのデフォルト コンストラクタ] の呼び出しに一致する関数がありません」とスローし続けます。シナリオは次のとおりです。
Class A {
A(int);//note, no default constructor
}
Class B : public A {
B(int i, int j) : A(i), someMemberVariable(j) {}
int someMemberVariable;
}
Class C : public B {
C(int k, int l) : B(k, l) {}
}
コンパイラは、クラス C のコンストラクターの行に「A::A() の呼び出しに一致する関数がありません」というエラーをスローし、A::A(int) を使用するように指示します。
クラス A のデフォルトのコンストラクターがなく、サブクラスをサブクラス化しようとするとコンパイラーが混乱することを理解しています。しかし、私が理解していないのはその理由です。まさにそれを避けるために、初期化リストを使用しました。2 レベルの深さのクラスのみを使用すると問題なく動作しますが、3 番目のクラスでエラーが発生します。ここで何が間違っていますか?