Salut,
Je ne sais pas si j'utilise le bon terme (DownCast) mais j'ai un petit souci.
En fait j'ai une classe "element" qui est abstraite et j'ai des sous classes concretes elementA, elementB et elementC.
J'ai une autre classe abstraite "collecteur" qui est sensée travailler sur un élément spécifique. Selon l'élément concret je ne veut pas faire les memes opérations. J'ai donc les classes concrete collecteurA, collecteurB et collecteurC. Elles implémentent toutes la fonction exec_query().
Ensuite j'ai une classe fabriquecollecteur qui définie 3 fonctions :
Code :
- collecteurA *creerCollecteur(elementA *eltA);
- collecteurB *creerCollecteur(elementB *eltB);
- collecteurC *creerCollecteur(elementC *eltC);
|
Jusque la ca peut aller, mais le probleme c'est que lorsque je créer mon collecteur je ne connait pas le type concret de mon element, je sais juste qu'il est du type élément. Exemple :
Code :
- element *eltA = new elementA();
- FabriqueCollecteur *fab = new FabriqueCollecteur();
- collecteur *collecteur1 = fab->creerCollecteur(eltA);
- collecteur1->exec_query();
|
et la j'ai une belle erreur de compilation :
error C2664: 'collecteurA *FabriqueCollecteur::creerCollecteur(elementA *)' : cannot convert parameter 1 from 'element *' to 'elementA *'
Ce que je comprend mais comment résoudre cette erreur?
Il y a bien des solutions en modifiant l'architecture et en spécifiant a chaque élément son collecteur mais j'aimerais que cette premiere solution fonctionne.
Si vous le souhaitez, vous pouvez tester les sources en prenant ca : sources
Message édité par AsTro le 16-05-2005 à 11:33:27