Bonjour à tous,
Je vous explique un peu ce que je fais avant d'expliquer ce qui ne vas pas.
Je dois creer deux classes, l'une pouvant stocker des "char" dans un tableau et pouvant pointer sur un objet du meme type de cette classe, appelons la Element, et une autre classe (on l'appelera lista) regroupant des Elements (l'objet). C'est donc une liste d' Elements. Le but final est de pouvoir lire un fichier avec des caracteres, de stocker chaque ligne dans un object Element (donc de mettre tous les symboles dans le tableau) et faire pointer le 1er objet vers le second, et le second vers le 3eme, etc.
Un objet de Lista representera donc, de maniere dérivée, toutes les lignes du fichiers.
Bon j'espere que vous avez compris, je vous montre le programme maintenant:
lista.h
lista.ccp
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 #include <cstdlib> #include <iostream> #include <new> using namespace std; extern int size_table ; class Element { char *Table; int Dimension; Element *next ; public : #include <cstdlib> #include <iostream> #include <new> using namespace std; extern int size_table ; class Element { char *Table; int Dimension; Element *next ; public : // Constructeur Element(int=3); // Destructeur ~Element(); // Constructeur de copie Element(const Element&); // permet d'initialiser le tableau d'un objet element (c'etait une fonction juste pour tester) void setElement(int,int); // permet d'acceder au pointeur next d'element depuis l'exterieur Element * return_next() { return next;} // Servira pour la lecture du fichier et l'ecriture egalement Element & operator=(char *) const; char* & operator=(const Element&) const; // Affiche le contenu d'un objet Element friend ostream &operator<<(ostream& o, Element&); }; class Lista : public Element { Element *Work; public : // Constructeur Lista(); // Destructeur ~Lista(); // Constructeur par copie Lista(const Lista&); };
main.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
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 #include "Lista.h" // Constructeur Element::Element(int a) { Table = new char[Dimension=a]; for (int i=0;i<Dimension;i++) { Table[i]=0; } next = NULL ; } // Constructeur par copie Element::Element(const Element & Elementcopy) { Dimension =Elementcopy.Dimension; Table= new (nothrow) char[Dimension]; for(int i=0; i<Dimension; i++) { Table[i]= Elementcopy.Table[i] ; } next = Elementcopy.next ; } // Servira a la lecture du fichier Element & Element::operator=(char *Table_char) const { Element M(size_table); for(int i=0; i<M.Dimension; i++) { M.Table[i]=Table_char[i] ; } return M; } // Servira a l'ecriture du fichier char * & Element::operator=(const Element &M) const { char * return_Table = new char[M.Dimension]; for(int i=0; i<M.Dimension; i++) { return_Table[i]=M.Table[i] ; } return return_Table; } // Destructeur Element::~Element() { delete[] Table; } // Accede au contenu d'un object Element void Element::setElement(int indice,int valeur) { Table[indice]=valeur; } // Affiche un objet Element ostream & operator<<(ostream& o, Element &M) { int i; for(i=0; i<M.Dimension; i++){ o<<"\t"; o<<M.Table[i]<<"\t"; o<<endl; } o<<endl; return o; } // Constructeur de lista Lista::Lista() { Work = NULL ; } // Constructeur par copie Lista::Lista(const Lista & Listacopy) { if (Listacopy.Work == NULL) cout << "Nothing to copy" << endl ; else { Element *suivant; Work = Listacopy.Work; suivant = (Listacopy.Work)->return_next(); while (suivant!= NULL) { Work = Work->return_next(); Work = suivant; suivant = suivant->return_next(); } } } // Destructeur par copie Lista::~Lista() { Element *n; Element *Suiv; n = Work; while (n!= NULL) { Suiv = n->return_next(); delete[] n; n=Suiv; } delete[] n; }
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 #include "Lista.h" int size_table=0 ; int main(int argc, char *argv[]) { Element M(4); // Creation d'un Element Element Aut(2); // Creation autre Element Aut.setElement(0,6); // Initialisation Aut.setElement(1,6); M.return_next() = &Aut ; // Je veux faire pointer M.return_next() vers l'Element Aut if (M.return_next()==NULL) cout << "Marche Pas" <<endl ; system("PAUSE"); return EXIT_SUCCESS; }
Ok donc dans mon main, je voulais tester si ce que j'avais fais avant marchait donc j'ai creé deux objets Element, de dimension differente et je voulais faire pointer le voisin de M (qui est next) vers A.
Si je ne m'abuse, M->next étant un pointeur, je peux faire "pointer" ce pointeur vers l'Element Aut en utilisant la syntaxe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part M.return_next() = &Aut ;
Cependant j'obtiens une erreur de compilation du genre "non lvalue in assignement". Je comprend ce que ce message signifie mais je comprend absolument pourquoi je l'obtiens.
En esperant avoir été clair, je vous remercie de vos réponses!
PS: je rappelle que j'étais en train de tester le programme donc si vous voyez des erreurs que j'aurais faites dans les autres parties, c'est normal que je ne les ai pas encore vues (mais bon si vous en voyez, merci de me les signaler)
Nico
Partager