Bonjour,
J'ai réalisé une classe BddPersonnes qui hérite en private d'une list<Personne*> où Personne est une classe abstraite.
Cette classe BddPersonnes contient 2 méthodes que j'aimerais pouvoir passer en const: affiche() et statistiques().
La classe BddPersonnes:
Les 2 méthodes concernées:
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 class BddPersonnes : private list<Personne*> { private: list<Personne*>::iterator _it; public: BddPersonnes(); BddPersonnes(const BddPersonnes&); ~BddPersonnes(); BddPersonnes& operator =(const BddPersonnes&); void ajouter(Personne* const); void ajouter(int, Personne* const); void supprimer(Personne* const); void supprimer(int); void statistiques(); void affiche(); };
La méthode qualite() est virtual pure dans Personne et la méthode affiche() est virtual.
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
23
24
25
26
27 void BddPersonnes::statistiques() { int countEtudiant = 0; int countEnseignant = 0; int countAdministratif = 0; for(_it = begin(); _it != end(); ++_it) { if((*_it)->qualite() == "Etudiant") ++countEtudiant; else if((*_it)->qualite() == "Enseignant") ++countEnseignant; else if((*_it)->qualite() == "Administratif") ++countAdministratif; } cout << "Il y a " << countEtudiant << " étudiants, " << countEnseignant << " enseignants et " << countAdministratif << " membres d'administration dans la base de données." << endl; } void BddPersonnes::affiche() { for(_it = begin(); _it != end(); ++_it) { (*_it)->affiche(); } }
Les classes Étudiant, Enseignant et Administratif héritent de Personne et redéfinissent correctement les méthodes nécessaires.
Le problème est le suivant: Lorsque je passe affiche() et statistiques() en const dans BddPersonnes, g++ renvoi une erreur sur les opérateurs = et ++ pour _it. J'ai bien essayé de passer par un const_iterator pour ces 2 méthodes mais il y a toujours une erreur de compilation.
Voici l'erreur de compilation:
BddPersonnes.cc: In member function «void BddPersonnes::affiche() const":
BddPersonnes.cc:74: erreur: no match for «operator=" in «((const BddPersonnes*)this)->BddPersonnes::_it = ((const BddPersonnes*)this)->BddPersonnes::<anonymous>.std::list<_Tp, _Alloc>::begin [with _Tp = Personne*, _Alloc = std::allocator<Personne*>]()"
/usr/include/c++/4.1.3/bits/stl_list.h:112: note: candidats sont: std::_List_iterator<Personne*>& std::_List_iterator<Personne*>::operator=(const std::_List_iterator<Personne*>&)
BddPersonnes.cc:74: erreur: passing «const std::_List_iterator<Personne*>" as «this" argument of «std::_List_iterator<_Tp>& std::_List_iterator<_Tp>::operator++() [with _Tp = Personne*]" discards qualifiers
En fait ce que je ne comprend pas trop c'est les candidats pour =![]()
Merci d'avance si vous pouvez m'éclairer![]()
Partager