class A { };
class B : public A {};
class C : public A, public B {};
int main()
{
C c;
A *pA = static_cast<A *>(&c);
}
にアップキャスト、クラスCは、2回の異なるパスでクラスAから誘導される:直接 1。私はクラスAへのポインタにクラスCのオブジェクトをキャストするときので< -B < -C(仮想継承を使用せずに)、複数の方法でベース・クラスであるC++クラス上記のコードで
すなわちBを介して間接的に 2から、G ++ Linux上では、次のエラーを報告: エラー:AがありますCのあいまいな基盤
私は同じコードをt彼は以下のように静的にキャストします: A * pA =&c; しかし、私はまだまったく同じエラーが発生します。
解決方法はありますか?ところで、Visual C++コンパイラを使用してWindows上でエラーなく正常に動作します。
私は仮想継承がこれを解決していることは知っていますが、仮想継承を使用せずにLinux上でg ++でこの作業を行うための解決策が必要です。仮想継承を使用する代わりに、2つのパスのどちらかを指定してあいまいさを取り除くことができます。どうもありがとう!
まず、継承ツリーはコードの匂いです。第二に、あなたが探しているものは仮想継承です。それを見てください;) – YSC
'C 'に' A'の継承されたインスタンスが2つ必要な理由を詳しく教えてください。構成はオプションですか? –
@YSC - いいえ、**デザイン**を変更することは、**コーディング**問題の解決策ではありません。同じタイプの** 2つの**ベースを持つことは不合理ではなく、それらを管理する方法を尋ねることは不合理ではありません。 –