Bonsoir,
J'aimerais que vous m'aidez à corriger le code suivant:
UnePiece.h
UnePieceSimple.h
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 #ifndef _UNEPIECE_H #define _UNEPIECE_H #include<string.h> class UnePiece { protected: char *sonNom; public: UnePiece(char *tel_ptr) { sonNom = NULL; sonNom = new char[strlen(tel_ptr)+1]; strcpy(sonNom,tel_ptr); }; }*/ ~UnePiece() { delete[] sonNom; }; #endif
UnePieceSimple.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 #ifndef _UNEPIECESIMPLE_H #define _UNEPIECESIMPLE_H #include "UnePiece.h" #include <string.h> class UnePieceSimple: public UnePiece { private: int son_poids; public: UnePieceSimple(char *tel_ptr ,int tel_pds): UnePiece(tel_ptr), son_poids(tel_pds){} int donnePoids(); void affiche(int); }; class UnePieceComposite :public UnePiece { private: UnePiece **sesComposants; // fin du tableau marquée par NULL public: UnePieceComposite(char *tel_ptrn , UnePiece **tel_ptrp) : UnePiece(tel_ptrn) { int i,j; for (i=0; tel_ptrp[i]; i++); sesComposants = new UnePiece*[i+1]; for (j=0;j<=i;j++) sesComposants[j]=tel_ptrp[j]; } int donnePoids(); void affiche(int); ~UnePieceComposite () { delete []sesComposants; } }; #endif
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 #include "UnePiece.h" #include "UnePieceSimple.h" #include <iostream> using namespace std; #include <string.h> int UnePieceSimple::donnePoids(){return son_poids;} void UnePieceSimple::affiche(int n) { int i; for (i=0; i<n; i++) cout << "\t"; cout << son_nom << endl; } int UnePieceComposite::donnePoids() { int som=0,i=0; while(sesComposants[i] != NULL) { som+=sesComposants[i]->donnePoids(); i++; } return som; } void UnePieceComposite::affiche(int n) { int i; for(i=0;i<n;i++) cout<<"\t"; cout << son_nom <<":"<< endl; i=0; while(sesComposants[i] != 0) { sesComposants[i]->affiche(n+1); i++; } }
Est-ce que les fonctions donnePoids() et affiche(int) doivent être virtuelles? Moi je pense que oui parce que sesComposants est un tableau de pointeurs de type UnePiece sur des objets de types UnePieceSimple et UnePieceComposite.
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 #include <cstdlib> #include <iostream> #include "UnePieceSimple.h" using namespace std; int main(int argc, char *argv[]) { UnePieceSimple la_1("ecrou", 14); UnePieceSimple la_2("vis", 12); UnePiece **tab_1 = {&la_1, &la_2, NULL}; UnePieceComposite la_3("appareil1", tab_1); UnePiece **tab_2 = {&la_1, &la_2, &la_3, NULL}; UnePieceComposite la_4("appareil2", tab_2); la_4.donnePoids(); la_4.affiche(1); system("PAUSE"); return EXIT_SUCCESS; }
Y a-t-il une erreur avec les destructeurs? Je voulais le vérifier mais plusieurs erreurs dont la cause est ignorée sont apparues:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 3 C:\Users\user\Desktop\kk\UnePieceSimple.h:3, from main.cpp In file included from UnePieceSimple.h:3, from main.cpp 3 C:\Users\user\Desktop\kk\main.cpp from main.cpp 15 C:\Users\user\Desktop\kk\UnePiece.h expected unqualified-id before '/' token 15 C:\Users\user\Desktop\kk\UnePiece.h expected init-declarator before '/' token 15 C:\Users\user\Desktop\kk\UnePiece.h expected `,' or `;' before '/' token C:\Users\user\Desktop\kk\main.cpp In function `int main(int, char**)': 12 C:\Users\user\Desktop\kk\main.cpp initializer for scalar variable requires one element 14 C:\Users\user\Desktop\kk\main.cpp initializer for scalar variable requires one element C:\Users\user\Desktop\kk\Makefile.win [Build Error] [main.o] Error 1
Partager