Bonjour à tous,

Le titre ne présente pas réellement mon problème qui est un peu plus complexe à mes yeux.

Pour simplifier au maximum, j'ai une classe A, qui à pour fille une classe B (mais qui elle, est abstraite) et elle à également une fille (classe C).



Donc je voudrais instancier ma classe C, mais pour ça j'ai également besoin de la classe A.

Note*: Aucune classe n'a de constructeur par défaut.

J'ai donc pensé à un constructeur de cette forme pour la classe C

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
C::C(const A& classeA)
:   A(classeA),
 
{
 
}
Mais ça ne fonctionne pas, j'ai un message d'erreur qui m'indique que je ne peux pas faire appel au constructeur de classe A car il n'est pas directement parent à C :

error: 'A' is not a direct base of 'C'

Du coup je me suis dit que j'allais faire appel au constructeur de A dans B et que j'allais appeler celui de B dans C.

Mais ça ne pourra pas non plus fonctionner parce que B ne peut pas être instancier (classe abstraite) ...

Cette ligne ne marche donc pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
B* classeC = new C(B(A(att1,att2,att3..)));
Je suis un peu perdu, j'imagine que ce problème est assez fréquent, mais je n'ai pas réussi à trouver de solution.

J'avais trouvé ce site qui en parlait un petit peu, mais je n'ai pas compris la solution non plus (http://www.cplusplus.com/forum/general/48524/)

Si quelqu'un à une idée je suis preneur.

Merci d'avance,

Tranxen