Bonjour,
J'ai un petit problème de template que je n'arrive pas à résoudre depuis quelques jours....
J'aimerais faire une fonction qui affiche le contenu d'une std::map et ce sans savoir le type de la clé et des valeurs. Mais je me fais jeté par le compilo sans vraiment saisir pourquoi.
Voici le code ca sera plus parlant...
mon .h :
Mon .cpp
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
28 #include<string> #include<iostream> using namespace std; void affiche(string s){ cout<<"<string>"<<s<<"</string>"<<endl; } void affiche(int i){ cout<<"<int>"<<i<<"</int>"<<endl; } template<class Key,class Value> void affiche(std::map<Key,Value>& _map){ cout<<"<map>"<<endl; std::map<Key,Value>::const_iterator iter; for(iter = _map.begin(); iter != _map.end();++iter){ cout<<"<MapKey>"<<endl; affiche(iter->first); cout<<"</MapKey>"<<endl; cout<<"<MapVal>"<<endl; affiche(iter->second); cout<<"</MapVal>"<<endl; } cout<<"</map>"<<endl; }
Je me fais jeter à la ligne :
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
28 typedef std::map<string,string,std::less<string> > mapString_String; typedef std::map<string,int,std::less<string> > mapString_Int; typedef std::map<string,mapString_String ,std::less<string> > mapString_mapString_String; mapString_String mapTest; mapString_Int mapTest2; mapString_mapString_String mapTest3; void main(){ mapTest.insert(mapString_String::value_type("titi","titivale")); mapTest.insert(mapString_String::value_type("titi2","titi2vale")); mapTest.insert(mapString_String::value_type("titi3","titi3vale")); mapTest2.insert(mapString_Int::value_type("titi",0)); mapTest2.insert(mapString_Int::value_type("titi1",2)); mapTest2.insert(mapString_Int::value_type("titi2",2)); mapTest3.insert(mapString_mapString_String::value_type("mapmap",mapTest)); affiche(mapTest3); }
avec le message suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 affiche(iter->second);
[C++ Erreur] templateTest.h(18): E2285 Impossible de trouver une correspondance pour 'affiche(const mapString_String)'
Si quelqu'un a la solution, je suis preneur !
Merci,
quaker
Partager