Bonjour à tous,
Mon programme est assez simple, je crée des objets 'Livre' que j'insère dans un objet 'VecteurTrie', dans lequel j'essaye de les trier par nom, puis par auteurs, pour ensuite les afficher.
Voici mon code :
surcharge des operateurs de comparaison dans Livre.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
29 int Livre::compare(Livre l) { if(strcmp(titre,l.titre) < 0) return -1; else if(strcmp(titre,l.titre) > 0) return 1; else { for(int i=0; i<MAX; i++) { if(strcmp((auteurs[i]->Nom),(l.auteurs[i]->Nom))== -1) return -1; if(strcmp((auteurs[i]->Nom),(l.auteurs[i]->Nom))== 1) return 1; } return 0; // si titre et auteurs identiques } } int Livre::operator<(const Livre& l) { return compare(l)== -1; } int Livre::operator==(const Livre& l) { return compare(l)== 0; } int Livre::operator>(const Livre& l) { return compare(l)== 1; }
Ma classe VecteurTrie.cpp
Ma classe VecteurTrie.h (au cas où):
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 template <class type> VecteurTrie<type>::VecteurTrie() { tab = new type[10]; pTop = tab; nbrElem=0; } template <class type> VecteurTrie<type>::VecteurTrie(int ne) { if(ne < 11) { nbrElem = ne; } else{ nbrElem = 10; } tab = new type[nbrElem]; pTop=tab; } template <class type> VecteurTrie<type>::VecteurTrie(const VecteurTrie<type> &v) { nbrElem=v.nbrElem; tab=new type[nbrElem]; tab=v.tab; pTop=v.pTop; } // fonction membre template <class type> void VecteurTrie<type>::insert(type a) { if(nbrElem < 10) { *pTop = a; pTop++; int mmin; type temp; // le tri ne fonctionne pas avec les objets livres... for (int i=0; i<nbrElem-1; i++) { mmin = i; for (int j=i+1; j<nbrElem; j++) { if (tab[j] < tab[mmin]) { mmin = j; } if (mmin != i) { temp = tab[i]; tab[i] = tab[mmin]; tab[mmin] = temp; } } } } else{ throw VectorFullException("Erreur: Le vecteur est plein."); } } template <class type> void VecteurTrie<type>::removeElem(type a) { if(nbrElem > 0) { int cpt = 0; for(int i=0; i<nbrElem; i++) { cpt++; if(a==tab[i]) { for(int j=cpt-1; j<nbrElem-1; j++) { tab[j]=tab[j+1]; } nbrElem--; cout << "Element retire : " << a << endl << endl; } else { cout << "Error: Element inexistant." << endl << endl; } } } else { cout << "Error: Vecteur vide." << endl << endl; } } template <class type> void VecteurTrie<type>::displayy(void) { if (nbrElem == 0) { cout << "Vecteur vide" <<endl; } else { for(type *i=pTop; i!=tab;) { cout << *--i << " "; } cout << endl; } } // class destructor template <class type> VecteurTrie<type>::~VecteurTrie() { delete[] tab; } template class VecteurTrie<int>; template class VecteurTrie<Livre>;
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 #ifndef VECTEURTRIE_H #define VECTEURTRIE_H #include "Vecteur.h" #include "vectorfullexception.h" #include "livre.h" /* * No description */ template <class type> class VecteurIter; template <class type> class VecteurTrie : public Vecteur { protected: type *tab; type *pTop; int nbrElem; public: VecteurTrie(); VecteurTrie(int nb); VecteurTrie(const VecteurTrie<type> &v); ~VecteurTrie(); type& operator[] (int i) {return *(tab+i);} bool operator<(const VecteurTrie& v) const {return tab < v.tab;} void insert(type a); void removeElem(type a); void displayy(); friend class VecteurIter<type>; }; #endif // VECTEURTRIE_H
Ma classe de test main.cpp
Le problème est qu'au moment de l'exécution, mon programme s'arrête crash, sans donner le moindre message d'erreur.
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 #include <cstdlib> #include <iostream> #include <stream.h> #include "Livre.h" #include "Vecteur.h" #include "VecteurTrie.h" using namespace std; int main(int argc, char *argv[]) { Livre p; int elem; int nbelem; VecteurTrie<Livre> vtl(3); // je décide qu'il y a trois elems cout << "Testons maintenant avec des livres." << endl; cout << endl; // je crée les livres: char *aut[3]={"Tintin","Spirou","Haddock"}; Livre p0 ("Coucou je suis Pierre Bolle", 3, "977-2-87777-007-1", aut, 3, 45,"Science-fiction"); Livre p1 ("Coucou ", 3, "977-2-87799-007-2", aut, 3, 55,"Germain"); Livre p2 ("Coucou je suis ", 3, "977-2-87788-007-3", aut, 3, 65,"Fantaisie"); vtl.insert(p0); vtl.insert(p1); vtl.insert(p2); //cout << "Vecteur de trois livres:" << endl << endl; //vtl.displayy(); system("PAUSE"); return EXIT_SUCCESS; }
Je précise que si je teste ma surcharge directement dans la classe main, elle fonctionne très bien.
Si je teste mon tri avec des entiers, cela fonctionne très bien également.
Je débute en c++ et j'ai bien sur bien lu mon cours ainsi que la FAQ du forum avant de poster
Merci d'avance pour votre aide.![]()
Partager