私は次のシナリオを持っています:
class A
{
public:
A(std::string id);
};
class B : public virtual A
{
public:
B();
};
class C : public virtual A
{
public:
C();
};
class D : public B, public C
{
public:
D(std::string id);
};
D::D(std::string id) : A(id), B(), C()
{
}
class X : public D
{
public:
X(std::string id);
}
X::X(std::string id) : D(id)
{
}
ここで、Dのインスタンスを作成すると、すべてが正常に機能します。ただし、Xのインスタンスを作成すると、コンパイラエラーが発生し、Aのデフォルトコンストラクタを呼び出そうとしていることを通知します。これは存在しません。作成するとコンパイルされますが、デフォルトのコンストラクターのみが呼び出されるため、idが正しく設定/初期化されません。
これは、次のようにXのコンストラクターを実装することで修正できます。
X::X(std::string id) : A(id), D(id)
{
}
しかし、私の理解では、これは不要なはずです。だから私のエラーはどこにありますか?