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

 


Dernière réponse
Sujet : VERY URGENT !!!!!!! c++ utulisation des template pour un class liste
Willythekid Que c'est moche ;)...tu devrais reprendre ton code un peu et surtout les notations de templates. Là dessus la mise en page du forum aide pas bcp!! :(
 
Tu peux pas faire de template avec un typedef directement en C++. Je ne pense pas (et je suis quasiment sûr :) ) que c'est pas dans la norme.
 
Donc maintenant plusieurs choix, soit tu récrit tout en remplacant tes "pt" par elem<TypeElem>*, soit tu écris ton typedef dans une classe. Parce que, ô bonté suprème, les classes accéptent les typedef...(ie STL)
 
template<class TypeElem> struct Element
{
    typedef elem<TypeElem>* pt;  
};
 
exemple d'utilisation:
 
Element<TypeElem>* pElement;  
pElement = new Element<TypeElem>;
Element<TypeElem>:: pt prout;
prout = new elem<TypeElem>(inf, tete);
 
Et c'est là que tu t'apercois que ta construction est absolument ideuse :D. Donc tu prends un crayon et tu réfléchis là dessus calmement et tu vas voir, il y a bien mieux :)
 
Au passage, tu delete pas les pointeurs que tu alloues?

 

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


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
Willythekid Que c'est moche ;)...tu devrais reprendre ton code un peu et surtout les notations de templates. Là dessus la mise en page du forum aide pas bcp!! :(
 
Tu peux pas faire de template avec un typedef directement en C++. Je ne pense pas (et je suis quasiment sûr :) ) que c'est pas dans la norme.
 
Donc maintenant plusieurs choix, soit tu récrit tout en remplacant tes "pt" par elem<TypeElem>*, soit tu écris ton typedef dans une classe. Parce que, ô bonté suprème, les classes accéptent les typedef...(ie STL)
 
template<class TypeElem> struct Element
{
    typedef elem<TypeElem>* pt;  
};
 
exemple d'utilisation:
 
Element<TypeElem>* pElement;  
pElement = new Element<TypeElem>;
Element<TypeElem>:: pt prout;
prout = new elem<TypeElem>(inf, tete);
 
Et c'est là que tu t'apercois que ta construction est absolument ideuse :D. Donc tu prends un crayon et tu réfléchis là dessus calmement et tu vas voir, il y a bien mieux :)
 
Au passage, tu delete pas les pointeurs que tu alloues?

 

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

the big ben :( Merci qd meme
H4dd3R Oups pardon j´avais pas vu que elem pouvait être initialisé (en fait tu insères un élément donc)..
 
Sinon désolé je vois pas trop pquoi il te fait chier.. :(
the big ben Je ne vois pas comment je dois faire alors sais tu m'éclairer  :??:
 
Mon but est d'inserer les nouveau elem au début de ma liste  
 
Tete -> elem1 -> elem2 -> ...
Tete -> Newelm -> elem1 -> elem2 -> ...
donc l'adresse de ma tete dois bien etre égal a l'adresse de mon nouvel elem et son champ next doit pointer vers l'elem qui étais pointé par l'ancien tete

 

[jfdsdjhfuetppo]--Message édité par The big ben--[/jfdsdjhfuetppo]

H4dd3R Dis à
else  
{
 tete = new elem<TypeElem>(inf, tete);
}
 
tu passes en paramêtre de ton constructeur l´adresse de l´object qui n´a même pas encore été construit?? :pt1cable:
the big ben voici tt mon prog ds son état actuel:
 
#include <iomanip.h>
#include <stdlib.h>
 
template <class TypeElem>
//****************** class elem ***********************************
class elem;
template <class TypeElem>
class liste;
 
template <class TypeElem>
typedef elem<TypeElem> *pt;
 
template <class TypeElem>
class elem  
{
private:
 TypeElem info;
 pt next;
public:
 friend class liste;
 elem(TypeElem inf , pt nex); //constructeur
};
 
template <class TypeElem>
elem<TypeElem>::elem(TypeElem inf , pt nex)
{
 info = inf;
 next = nex;
}
 
//****************** class liste **********************************
template <class TypeElem>
class liste
{
 private:
  //elem<char> E;
  bool vide;
  pt tete;
 public:
  liste(){vide =true;};  //constructeur
  void ins(TypeElem inf);
  //bool vide({return vide});   //fn vide
  //pt tete(return tete);
 // void print();
};
 
/*template <class TypeElem>
liste<TypeElem>:liste()
{
 vide = true;
}*/
 
template <class TypeElem>
void liste<TypeElem>::ins(TypeElem inf)
{
 if (vide==true)
 {
  tete = new elem<TypeElem>(inf, NULL);
  vide = false;
 }
 else  
 {
  tete = new elem<TypeElem>(inf, tete);
 }
}
 
/*template <class TypeElem>
void liste<TypeElem>::print()
{
 for (pt point=tete, point->next != NULL, point = point->next)
 {
  cout << point->info << endl;
 }
}*/
 
int main()
{
 liste<int> L;
 int temp;
 for (int i = 0; i< 6; ++i)
 {
  cin >> temp;
  L.ins(temp);
 }
// L.print();
 
 
 return EXIT_SUCCESS;
}
Willythekid ton "tete" il est déclaré comment?
the big ben Je dois crée des liste en utulisant des template.
G 2 class: elem et liste.
 
 
template <class TypeElem>
 
constructeur d'elem: elem(TypeElem inf , pt nex);
 
création d'un nouvel elem dans ma liste:  
tete = new elem<TypeElem>(inf, NULL);
 
l'erreur est:
error C2440: '=' : cannot convert from 'class elem<char> *' to 'class elem<`template-parameter-1'> *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

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