Probleme de pointeur et de class - Programmation
Marsh Posté le 17-04-2002 à 17:26:17
on pourrait avoir le message d'erreur exacte
Marsh Posté le 17-04-2002 à 17:32:03
Dans borlan : ARBRE2PL.H(10,17):undefined symbol 'NULL'
idem au (17,17); (20,17) (donc dans la meme ligne)
et au (34,17) (donc a la ligne: Arbre2 (): rac(NULL) {})
Marsh Posté le 17-04-2002 à 22:00:39
Remplace tes NULL par des 0.
En passant, NULL est defini comme un char* en C++, mieux vaut donc utiliser 0 pour éviter des pb de transtypage.
Marsh Posté le 18-04-2002 à 11:30:14
Si non effectivement il doit te manquer un #include qq part.
Marsh Posté le 18-04-2002 à 11:43:01
Mais maintenant j ai un autre probleme comment dans mon prog principal puis je sauvgarder la valeur revoyée par Rac() par exemple Car il revoie un pointeur de type place est ce que je peu me définire un pointeur de type place dans mon prog principal ???? si oui comment ???
Marsh Posté le 18-04-2002 à 12:16:49
C est pour les cours et je ne peu pas modifier la class !!! c'est ca mon probleme !!!!!
Marsh Posté le 18-04-2002 à 12:22:23
mais dans mon prog princ il ne connais pas Place vu que c'est interne a ma class !!!
Marsh Posté le 18-04-2002 à 12:28:02
la class est défini en dehors de la fonction main ! (logique )
Marsh Posté le 18-04-2002 à 12:30:05
Certe, mais dans quels fichiers?
Marsh Posté le 18-04-2002 à 12:34:46
dans un fichier *.h ( header ! )
donc je résume! on nous donne un fichier *.h avec une class Noeud imbriqué dans une class Arbre2...
et on doit faire une fonction de parcours de préordre en dehors de la class => donc dans un autre fichier *.cpp où on doit faire un #include "Arbre2.h"
voila!
[jfdsdjhfuetppo]--Message édité par EarthTrAsh--[/jfdsdjhfuetppo]
Marsh Posté le 18-04-2002 à 12:40:38
Je vois pas ou est le pb.
Dans ton prog principale tu fais:
Arbre2 monArbre;
Arbre2::Place resultat;
resultat = monArbre.Rac();
Marsh Posté le 18-04-2002 à 12:41:56
heu c koi cet icon ???? ca gache le paysage !!
y en a plus !!!
[jfdsdjhfuetppo]--Message édité par EarthTrAsh--[/jfdsdjhfuetppo]
Marsh Posté le 18-04-2002 à 12:48:25
heu ca va po!
il met com msg d'error : type name expected
g mis
Arbre2<Elem> monArbre;
Arbre2<Elem>::Place resultat;
car sinon il accepte po
Marsh Posté le 18-04-2002 à 12:54:31
Autant pour moi, pas vu qye ct une classe template. Fais plutôt ça alors:
typedef Arbre2<int> ArbreInt; //On va se faire un arbre d'entier c
//pas trop compliqué
typedef ArbreInt::Place PlaceInt;
ArbreInt monArbre;
PlaceInt resultat;
resultata = monArbre.Rac();
Marsh Posté le 18-04-2002 à 12:59:42
je le met ou ? dans le fct main() ??
oki c fait ! ca marche mais ! tu peux po expliqué
le 2èm typedef ??( juste pour voir si g bien compris )
une dernière question !! ca se fais souvent ce genre de typedef ????
[jfdsdjhfuetppo]--Message édité par EarthTrAsh--[/jfdsdjhfuetppo]
Marsh Posté le 18-04-2002 à 13:05:21
#include "Arbre2.h"
typedef Arbre2<int> ArbreInt;
typedef ArbreInt::Place PlaceInt;
int main(int,char**)
{
ArbreInt monArbre;
//Création de l'arbre
PlaceInt resultat;
resultata = monArbre.Rac();
return 0;
}
Marsh Posté le 18-04-2002 à 13:13:38
oki c fait ! ca marche mais ! tu peux po expliqué
le 2èm typedef ??( juste pour voir si g bien compris )
une question,ca se fais souvent ce genre de typedef ????
et c normale si il me sort un résultat en héxa ??? Ox.....
[jfdsdjhfuetppo]--Message édité par EarthTrAsh--[/jfdsdjhfuetppo]
Marsh Posté le 18-04-2002 à 13:20:33
Le premier typedef permet d'instancier le template. Le deuxième est juste "un racourci" pour accéder à la classe Place, c'est pour éviter d'avoir à écrire à chaque fois AbreInt::Place.
On a à faire des typedef de ce style dés qu'on commence à faire des trucs avec les templates.
Marsh Posté le 18-04-2002 à 13:27:22
eu ca veut dire koi " instancier " ??
et Place c po une class mais un typedef de Noeud* ( typedef Noeud* Place; )
enfin un très grand grand merci !!
Marsh Posté le 17-04-2002 à 17:18:18
J ai recu cette classe tel quelle a un cour mais j ai qq probleme ... voir + bas !!!
Il me fait des erreurs aves mes constante NULL voir message plus bas
D'avance merci
Mon prog principal:
#include "arbre2PL.h"
void main()
{
Arbre2<int> A;
}
template <class Elem>
class Arbre2 {
class Noeud {
friend class Arbre2<Elem>;
Elem info;
Noeud *pere, *fg, *fd;
Noeud (const Elem& E, Noeud* P=NULL, Noeud* G=NULL, Noeud* D=NULL):
info(E), pere(P), fg(G), fd(D) {}
};
public:
typedef Noeud* Place;
private:
Place rac;
inline static Place Copy (Place, Place = NULL);
inline static void Cancel(Place&);
public:
bool Existe (Place p) const {return p != NULL;}
Place Rac () const {return rac;}
Place Pere (Place p) const {return p->pere;}
Place FilsG (Place p) const {return p->fg;}
Place FilsD (Place p) const {return p->fd;}
Elem& operator[] (Place p) {return p->info;}
void InsG (const Elem& E, Place p) {Cancel(p->fg); p->fg = new Noeud(E, p);}
void InsD (const Elem& E, Place p) {Cancel(p->fd); p->fd = new Noeud(E, p);}
void InsG (const Arbre2& A, Place p) {Cancel(p->fg); p->fg = Copy(A.rac, p);}
void InsD (const Arbre2& A, Place p) {Cancel(p->fd); p->fd = Copy(A.rac, p);}
void SupG (Place p) {Cancel(p->fg);}
void SupD (Place p) {Cancel(p->fd);}
// Constructeurs
Arbre2 (const Elem& E): rac(new Noeud(E)) {}
Arbre2 (): rac(NULL) {}
Arbre2 (const Arbre2& A, Place p): rac(Copy(p)) {}
Arbre2 (const Arbre2& A): rac(Copy(A.rac)) {}
Arbre2& operator= (const Arbre2& A) {
if (this != &A) {Cancel(rac); rac = Copy(A.rac);}
return *this;
}
~Arbre2 () {Cancel(rac);}
};
template <class Elem>
Arbre2<Elem>::Place Arbre2<Elem>::Copy (Place s, Place p) {
Place f = NULL;
if (s) {
f = new Noeud(s->info, p);
f->fg = Copy(s->fg, f);
f->fd = Copy(s->fd, f);
}
return f;
}
template <class Elem>
void Arbre2<Elem>::Cancel (Place& p) {
if (p) {
Cancel(p->fg);
Cancel(p->fd);
delete p; p = NULL;
}
}
[jfdsdjhfuetppo]--Message édité par The big ben--[/jfdsdjhfuetppo]