Bonjour,
j'ai un peu de mal avec les classe abstraite, et je remercie d'avance celui qui prendra un peu de temps pour me répondre.
Voilà mon problème, j'ai une classe abstraite Element toute simple:
Element.h
et j'ai 2 classes qui dérive de cette classe abstraite, Collection et Literal:Code:
1
2
3
4
5 class Element { public : virtual void affiche() = 0; };
Collection.h
Literal.hCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include "Literal.h" #include "Element.h" #include "Maillon.h" class Collection:public Element { private: Maillon* tete; Maillon* queue; public: Collection(); void ajout(Element* E); bool vide(); void affiche(); Maillon* getTete(); Maillon* getQueue(); };
Et puis Maillon.h si ça peux vous aidez:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "Element.h" class Literal:public Element { private: char nom; bool polarite; public: Literal(char N, bool P); void affiche(); char getNom(); bool getPolarite(); };
Et ensuite dans ma classe principale je veux faire ça:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include "Literal.h" class Maillon { private: Element* info; Maillon* suiv; public: Maillon(Element* L); Maillon* getSuiv(); void setSuiv(Maillon* M); void affiche(); Element* getElement(); };
listeClause est un objet de Collection.Code:
1
2 Maillon* clauseCour = listeClause->getTete(); Literal* litCour = clauseCour->getElement()->getTete();
Ce code ne fonctionne pas, le message d'erreur est que getTete() n'est pas une méthode de la classe élement.
Je ne sais pas comment faire, en fait j'ai une collection où chaque maillon est une autre collection (c'est pour ça que Collection dérive d'élément), et ces "sous-collections" sont des collections de litéral. Il faut que je parcours tout les litéraux.
Je sais pas si c'est très clair, je peux vous mettre les .cpp si vous voulez aussi.