1

私は今、C++での仮想派生におけるあいまいさのさまざまな状況を学んでいます。しかし、コードにあいまいさのエラーがあり、その理由がわかりません...

これが私のコードです:

class V {
    public:
        int v ;
};

class A {
    public:
        int a ;
};

class B : public A, public virtual V {

};

class C : public A, public virtual V {

};

class D : public B, public C {
    public:
        void f() ;
};

void g() {
    D d ;
    B* pb = &d ;  // No Problem
    A* pa = &d ;  // Error: 'A' is ambiguous base of 'D'
    V* pv = &d ;  // No Problem
}

なぜこのエラーが発生するのかわかりませんが、他の影響に関するエラーは発生しません。

ありがとうございました :-)

4

1 に答える 1

2

これは、多重継承の場合に完全に予想されます。ここにあるのは、ダイヤモンドの継承の場合です。これで、DにはAの2つのコピーがあります。1つはBから継承され、もう1つはCから継承されます。Dに公開されたAのメンバーがBまたはCのどちらから来ているかを指定する必要があります。

参照:C ++を使用して、同じ基本クラスから2回正しく継承するにはどうすればよいですか?

あなたは考えるかもしれません:

  • 仮想継承の使用:

    class B : public virtual A, public virtual V {...};

    class C : public virtual A, public virtual V {...};

  • 多重継承から抜け出す方法として構成を使用する。

仮想継承による菱形継承問題の解決を読むことをお勧めします

于 2012-04-10T17:55:32.847 に答える