Originariamente inviato da GreyFox86
codice:
D *d = new D;
d->B::A::next=0;
d->C::A::next=0;
A me nemmeno compila scritto così.

codice:
D *d = new D;
d->A::next=0;
d->A::next=0;
Invece così si.
Il problema è che il compilatore non sa decidere a quale ramo di derivazione riferirsi e quindi blocca tutto. E uno dei casi dovuti all'ereditarietà cosidetta a rombo o a diamante.

Se scrivi:
codice:
class B : virtual public A { }; 
class C : virtual public A { }; 
class D : virtual public B, virtual public C { };
dovrebbe compilare (almeno a me lo fa)

Qui c'è una spiegazione migliore
http://www.eptacom.net/pubblicazioni.../antimorf.html