Ambiguität - was ist falsch?
-
hallo,
im nächsten kapitel meiner lernreise versuche ich zu verstehen, wie ich diese ambiguität auflösen kann:#include <iostream> using namespace std; class A {}; class B : public A {}; class C : public A {}; class D : public B, public C { // <<<-- virtual B, virtual C bring nix }; void calc(const A & a1, const A & a2) { } int main() { B b; D d; calc(b, d); return 0; }
das gibt
g++ -Wall -o "multiple_inh" "multiple_inh.cc" -std=c++11 (in ... multiple_inh.cc: In function 'int main()': multiple_inh.cc:21:11: error: 'A' is an ambiguous base of 'D' calc(b, d); ^ Compilation failed.
was könnte ich versuchen?
-
@patrickm123 sagte in Ambiguität - was ist falsch?:
virtual C bring nix
Doch, an der richtigen Stelle schon:
class B : virtual public A {}; class C : virtual public A {};
-
ok virtual public combo geht in der tat (hatte nur virtual benutzt)
-
Das alles würde in einem anständigen Buch erklärt.
-
@patrickm123 sagte in Ambiguität - was ist falsch?:
ok virtual public combo geht in der tat (hatte nur virtual benutzt)
Das Problem ist als diamond of death bekannt. Mit diesen Ausdruck sollten sich entsprechende Erklärungen schnell finden lassen.