Salut à tout le monde !
J'espère qu'à vous pourrez me donner un coup de main avec un problème lié à recursivité et aux méthodes virtuelles.
J'ai une fonction virtuelle qui s'appelle inList et qui est déclaré dans la classe de base qui s'appelle Product.
La méthode inList est redéfinie dans 2 classes dérivées de Product : CompositeProduct et BasicProduct.
CompositeProduct a une attribute "std::vector<Product *> _listProduct". Ainsi on peut former des arbres composés par des BasicProducts et CompositeProducts à condition qu'à la base de l'arbre se trouve une CompositeProduct.
La finalité de la méthode inList est de repèrer si un produit se trouve dans l'arbre ou pas.
les declarations pour inList sont les suivantes :
Quand j'essaie de compiler, le compilateur me montre les erreurs suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 inList declaration on class Product (classe de base): virtual bool inList(const Product * &)=0; inList implementqtion on class CompositeProduct (qui hérite de Product): bool CompositeProduct::inList(const Product* &iProduct) { std::list<Product*>::iterator iter; if (iProduct==this) {return true;} else { for (iter=_productList.begin(); iter!=_productList.end(); iter++) inList(*iter); } } inList implementation on class BasicProduct (aussi elle hérite de Product): bool BasicProduct::inList(const Product* & iProduct) { if (iProduct==this) return true; else return false; }
error: no matching function for call to ‘CompositeProduct::inList(Product*&)’
note: candidates are: virtual bool CompositeProduct::inList(const Product*&)
error: no matching function for call to ‘CompositeProduct::inList(BasicProduct*&)’
note: candidates are: virtual bool CompositeProduct::inList(const Product*&)
Quelqu'un peut m'aider svp?
Quelqu'un a une idée de ce qu'il faut que je fasse ?
Merci d'avance !
Partager