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

 


Dernière réponse
Sujet : Probleme de pointeur et de class
EarthTrAsh 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 !!

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
EarthTrAsh 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 !!
LetoII 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.
EarthTrAsh 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]

LetoII #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;
}
EarthTrAsh 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]

LetoII 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();
EarthTrAsh 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
EarthTrAsh heu c koi cet icon ????  :lol:  :lol:  :lol:  ca gache le paysage !!
 
  :??:  :??:  y en a plus  !!!

 

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

LetoII Je vois pas ou est le pb.
 
Dans ton prog principale tu fais:
 
Arbre2        monArbre;
Arbre2::Place resultat;
 
resultat = monArbre.Rac();
EarthTrAsh 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]

LetoII Certe, mais dans quels fichiers?
EarthTrAsh la class est défini en dehors de la fonction main ! (logique )
LetoII Elle est défini où ta classe?
the big ben mais dans mon prog princ il ne connais pas Place  vu que c'est interne a ma class !!!
LetoII Je vois pas le raport.
the big ben C est pour les cours et je ne peu pas modifier la class !!! c'est ca mon probleme !!!!!
LetoII Place *placePtr
the big ben 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 ???
LetoII Si non effectivement il doit te manquer un #include qq part.
the big ben Un super grand merci aparament sa fonctionne !!!!!   :)  :)  :)
LetoII 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.
HappyHarry y a un include qui manque : stdio.h
the big ben 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) {})
archangel on pourrait avoir le message d'erreur exacte :??:
the big ben 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]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)