Erreurs inconnues + questions
Bonsoir,
J'aimerais que vous m'aidez à corriger le code suivant:
UnePiece.h
Code:
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.h
Code:
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 |
UnePieceSimple.cpp
Code:
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++;
}
} |
main.cpp
Code:
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;
} |
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.
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:
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 |