Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3255 connectés 

  FORUM HardWare.fr
  Programmation

  Probleme de pointeur et de class

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de pointeur et de class

n°127313
the big be​n
Posté le 17-04-2002 à 17:18:18  profilanswer
 

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]

mood
Publicité
Posté le 17-04-2002 à 17:18:18  profilanswer
 

n°127320
archangel
Un homme Une vision
Posté le 17-04-2002 à 17:26:17  profilanswer
 

on pourrait avoir le message d'erreur exacte :??:


---------------
J'suis timide - Prêt à mourir, mais pas à vivre - Je suis vraiement très fatigué ... - more than meets the eye
n°127330
the big be​n
Posté le 17-04-2002 à 17:32:03  profilanswer
 

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) {})

n°127419
HappyHarry
Posté le 17-04-2002 à 20:01:04  profilanswer
 

y a un include qui manque : stdio.h

n°127496
LetoII
Le dormeur doit se réveiller
Posté le 17-04-2002 à 22:00:39  profilanswer
 

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.


---------------
Le Tyran
n°127697
the big be​n
Posté le 18-04-2002 à 11:27:41  profilanswer
 

Un super grand merci aparament sa fonctionne !!!!!   :)  :)  :)

n°127703
LetoII
Le dormeur doit se réveiller
Posté le 18-04-2002 à 11:30:14  profilanswer
 

Si non effectivement il doit te manquer un #include qq part.


---------------
Le Tyran
n°127722
the big be​n
Posté le 18-04-2002 à 11:43:01  profilanswer
 

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 ???

n°127748
LetoII
Le dormeur doit se réveiller
Posté le 18-04-2002 à 11:56:17  profilanswer
 

Place *placePtr


---------------
Le Tyran
n°127769
the big be​n
Posté le 18-04-2002 à 12:16:49  profilanswer
 

C est pour les cours et je ne peu pas modifier la class !!! c'est ca mon probleme !!!!!

mood
Publicité
Posté le 18-04-2002 à 12:16:49  profilanswer
 

n°127772
LetoII
Le dormeur doit se réveiller
Posté le 18-04-2002 à 12:19:57  profilanswer
 

Je vois pas le raport.


---------------
Le Tyran
n°127774
the big be​n
Posté le 18-04-2002 à 12:22:23  profilanswer
 

mais dans mon prog princ il ne connais pas Place  vu que c'est interne a ma class !!!

n°127777
LetoII
Le dormeur doit se réveiller
Posté le 18-04-2002 à 12:24:57  profilanswer
 

Elle est défini où ta classe?


---------------
Le Tyran
n°127778
EarthTrAsh
kikou c moi ! :-)
Posté le 18-04-2002 à 12:28:02  profilanswer
 

la class est défini en dehors de la fonction main ! (logique )

n°127779
LetoII
Le dormeur doit se réveiller
Posté le 18-04-2002 à 12:30:05  profilanswer
 

Certe, mais dans quels fichiers?


---------------
Le Tyran
n°127782
EarthTrAsh
kikou c moi ! :-)
Posté le 18-04-2002 à 12:34:46  profilanswer
 

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]


---------------
Ke jsuis movais en programmation
n°127786
LetoII
Le dormeur doit se réveiller
Posté le 18-04-2002 à 12:40:38  profilanswer
 

Je vois pas ou est le pb.
 
Dans ton prog principale tu fais:
 
Arbre2        monArbre;
Arbre2::Place resultat;
 
resultat = monArbre.Rac();


---------------
Le Tyran
n°127788
EarthTrAsh
kikou c moi ! :-)
Posté le 18-04-2002 à 12:41:56  profilanswer
 

heu c koi cet icon ????  :lol:  :lol:  :lol:  ca gache le paysage !!
 
  :??:  :??:  y en a plus  !!!

 

[jfdsdjhfuetppo]--Message édité par EarthTrAsh--[/jfdsdjhfuetppo]


---------------
Ke jsuis movais en programmation
n°127790
EarthTrAsh
kikou c moi ! :-)
Posté le 18-04-2002 à 12:48:25  profilanswer
 

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


---------------
Ke jsuis movais en programmation
n°127794
LetoII
Le dormeur doit se réveiller
Posté le 18-04-2002 à 12:54:31  profilanswer
 

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();


---------------
Le Tyran
n°127798
EarthTrAsh
kikou c moi ! :-)
Posté le 18-04-2002 à 12:59:42  profilanswer
 

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]


---------------
Ke jsuis movais en programmation
n°127801
LetoII
Le dormeur doit se réveiller
Posté le 18-04-2002 à 13:05:21  profilanswer
 

#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;
}


---------------
Le Tyran
n°127807
EarthTrAsh
kikou c moi ! :-)
Posté le 18-04-2002 à 13:13:38  profilanswer
 

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]


---------------
Ke jsuis movais en programmation
n°127811
LetoII
Le dormeur doit se réveiller
Posté le 18-04-2002 à 13:20:33  profilanswer
 

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.


---------------
Le Tyran
n°127815
EarthTrAsh
kikou c moi ! :-)
Posté le 18-04-2002 à 13:27:22  profilanswer
 

eu ca veut dire koi  " instancier " ??
et Place c po une class  mais un typedef de Noeud* ( typedef Noeud* Place;   :non: )
 
enfin  un très grand grand merci !!


---------------
Ke jsuis movais en programmation
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Probleme de pointeur et de class

 

Sujets relatifs
JAVA .class[PHP] Problème dans le passage des paramètres
Gros probleme de style :(Problème en PHP
[OPENGL] reaction matiere/lumiere probleme de scaleprobleme pour mise a jour d un site
Problème avec document.form.action en JavaScript[VB] Problème de recordset....
Probleme dans un script PHP[VB] Problème de BD...
Plus de sujets relatifs à : Probleme de pointeur et de class


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR