可能性の重複:つまり
Default constructor and virtual inheritance仮想継承とパラメータ化コンストラクタ
class Base
{
private:
int number;
protected:
Base(int n) : number(n) {}
public:
virtual void write() {cout << number;}
};
class Derived1 : virtual public Base
{
private:
int number;
protected:
Derived1(int n, int n2) : Base(n), number(n2) {}
public:
virtual void write() {Base::write(); cout << number;}
};
class Derived2 : virtual public Base
{
private:
int number;
protected:
Derived2(int n, int n2) : Base(n), number(n2) {}
public:
virtual void write() {Base::write(); cout << number;}
};
class Problematic : public Derived1, public Derived2
{
private:
int number;
public:
Problematic(int n, int n2, int n3, int n4) : Derived1(n, n2), Derived2(n, n3), number(n4) {}
virtual void write() {Derived1::write(); Derived2::write(); cout << number;}
};
int main()
{
Base* obj = new Problematic(1, 2, 3, 4);
obj->write();
}
3 4 "を出力します。しかし、コンパイラは、Baseでパラメータのないコンストラクタが必要だと不平を言っていますが、追加すると "1"がゴミに変わります。どのようにそれにアプローチする上の任意のアイデア?パラメータ化されたコンストラクタを使用してダイヤモンドパターンを解くことも可能ですか?
あなたは行方不明; 'sの派生クラス – cppguy
@cppguyに - 私はそれを見ることはありませんが、それはともかく、実際のコード(おそらくタイプミス)ではありません。 –
@MaciejStachowski ildjarnはそれをあなたのために追加しました –