Bonjour,
Le titre peut faire penser à la discussion juste au-dessus, mais pas tout à fait.

Je me demandais si l'héritage d'une classe de base était bel et bien sensé devenir virtuel après le premier héritage virtuel... Un exemple sera plus rapide :

Voilà ce qui ne marchait pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
classe Base {
}
;
class Interface{
};
 
class Derived : virtual public Base, public Interface {
};
 
int main() {
  Derived d;
  Interface * i = &d //error : cannot convert from Derided* to Interface *
}
Code qui marche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
classe Base {
}
;
class Interface{
};
 
class Derived : public Interface, virtual public Base {
};
 
int main() {
  Derived d();
  Interface * i = &d // Marche parfaitement
}
Du coup, je me demandais où se plaçait la restriction. La norme ? La technique ? Le compilateur ? Merci d'avance de satisfaire ma curiosité !