Bonjour à tous.
Me voila devant un problème devant lequell je n'arrive pas a me dépatouiller.
J'essaye de permettre une recherche sur les différents attributs de qqs objetcs stockés au sein d'une liste.
Les prérequis :
une classe toto
une liste de toto
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class toto { string nom; int age; // getters et setters ... }
les foncteurs de recherche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 std::list<toto> listToto;
la fonction de recherche
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 struct rechercheNom { rechercheNom(const string &s): nom(s) {} bool operator()(const Contact & obj1) const { return obj1.getNom() == nom; } private: string nom; }; struct rechercheAge { rechercheAge(const int&i): age(i) {} bool operator()(const Contact & obj1) const { return obj1.getAge() == age; } private: int age; };
Dans l'état actuel, le code n'a pas l'air trop mal et le compilateur ne dit rien a la compilation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 template<class T> ListToto* ListToto::rechercherListe(int colonne, T critere) { switch(colonne) { // nom case 1 : find_if(listToto->begin(), listToto->end(), rechercheNom(critere));break; case 2 : find_if(listToto->begin(), listToto->end(), rechercheAge(critere);break; } // On ne s'occupe pas du retour pour le moment return this; }
Mais voila un petit main rapide qui lui, pose problème au compilateur
Donc voila, je comprend pourquoi le compilateur ne veut pas compiler, étant donné qu'il ne peut pas savoir a l'avance quelle sera la bonne methode appellée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 main(void) { // Recherche du premier object ayant comme nom "nico" listToto.rechercherListe<string>(1, "nico"); // Erreur : impossible de convertir 'string' en 'rechercheAge' // Recherche du premier object ayant comme age 20 ans listToto.rechercherListe<int>(2, 20); // Erreur : impossible de convertir 'int' en 'rechercheNom' }
Mais je ne trouve pas de solution alternative pour éviter ce problème.
Je suis sur qu'un d'entre vous aura une bonne idée à tout cela
Partager