Bonjour,
Le but de mon exercice est de réécrire le conteneur 'map' à l'aide d'une classe Dictionnaire qui contient un tableau dynamique d'Associations.
Oui cela n'a pas de sens, mais ça permet de s'initier aux vectors et aux templates.
J'ai donc une classe Assoc, que voici...
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 template<typename TypeCle, typename TypeValeur> class Assoc{ private: TypeCle cle; TypeValeur valeur; public: Assoc(); Assoc(TypeCle, TypeValeur); virtual ~Assoc (); virtual TypeCle getCle()const; virtual void setCle(TypeCle); virtual TypeValeur getValeur()const; virtual void setValeur(TypeValeur); virtual void affiche(ostream&)const; }; template<typename TypeCle, typename TypeValeur> ostream& operator<<(ostream&, const Assoc<TypeCle,TypeValeur>&);...et ma classe Dictionnaire qui doit contenir un tableau dynamique d'associations.
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
29
30
31
32
33
34
35
36
37
38
39
40 template<typename TypeCle, typename TypeValeur> Assoc<TypeCle,TypeValeur>::Assoc() {} template<typename TypeCle, typename TypeValeur> Assoc<TypeCle,TypeValeur>::Assoc(TypeCle c, TypeValeur v) :cle(c), valeur(v) {} template<typename TypeCle, typename TypeValeur> Assoc<TypeCle,TypeValeur>::~Assoc () {} template<typename TypeCle, typename TypeValeur> TypeCle Assoc<TypeCle,TypeValeur>::getCle() const { return cle; } template<typename TypeCle, typename TypeValeur> void Assoc<TypeCle,TypeValeur>::setCle(TypeCle c) { cle=c; } template<typename TypeCle, typename TypeValeur> TypeValeur Assoc<TypeCle,TypeValeur>::getValeur() const { return valeur; } template<typename TypeCle, typename TypeValeur> void Assoc<TypeCle,TypeValeur>::setValeur(TypeValeur v){ valeur=v; } template<typename TypeCle, typename TypeValeur> void Assoc<TypeCle,TypeValeur>::affiche(ostream &os) const { os <<getCle() << ", " <<getValeur(); } template<typename TypeCle, typename TypeValeur> ostream& operator<<(ostream& os, const Assoc<TypeCle,TypeValeur>& a){ a.affiche(os); return os; }
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 template<typename TypeCle, typename TypeValeur> class Dictionnaire { private : vector < Assoc<TypeCle, TypeValeur> > associations; public : Dictionnaire(); ~Dictionnaire(); void put(TypeCle, TypeValeur); TypeValeur get(TypeCle) const; bool estVide() const; int taille() const; bool contient(TypeCle) const; ostream& affiche(ostream&) const; Dictionnaire& operator=(const Dictionnaire&); }; template<typename TypeCle, typename TypeValeur> ostream& operator<< (ostream& os, const Dictionnaire<TypeCle, TypeValeur>&);J'ai essayé des tester mon constructeur et ma méthode 'put' comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 template<typename TypeCle, typename TypeValeur> Dictionnaire<TypeCle, TypeValeur>::Dictionnaire(): associations(10) { } template<typename TypeCle, typename TypeValeur> Dictionnaire<TypeCle, TypeValeur>::~Dictionnaire() { } template<typename TypeCle, typename TypeValeur> void Dictionnaire<TypeCle, TypeValeur>::put(TypeCle cle, TypeValeur valeur) { Assoc<TypeCle, TypeValeur> a(cle, valeur); associations.push_back(a); }
Mais j'ai les erreurs suivantes, et je ne comprend pas pourquoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int main() { Dictionnaire<string, int> dico; dico.put("abricot", 235); return 0; }
Merci à vous.main.cpp:(.text+0x12): undefined reference to `Dictionnaire<std::string, int>::Dictionnaire()' main.cpp:(.text+0x23): undefined reference to `Dictionnaire<std::string, int>::~Dictionnaire()' collect2: error: ld returned 1 exit status
Partager