VERY URGENT !!!!!!! c++ utulisation des template pour un class liste

VERY URGENT !!!!!!! c++ utulisation des template pour un class liste - Programmation

Marsh Posté le 11-02-2002 à 18:30:42    

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

Reply

Marsh Posté le 11-02-2002 à 18:30:42   

Reply

Marsh Posté le 11-02-2002 à 20:01:53    

ton "tete" il est déclaré comment?


---------------
Si t'es pas net, reste a la buvette
Reply

Marsh Posté le 12-02-2002 à 13:48:08    

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

Reply

Marsh Posté le 12-02-2002 à 15:11:50    

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:


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 12-02-2002 à 16:45:25    

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]

Reply

Marsh Posté le 12-02-2002 à 17:17:05    

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.. :(

Reply

Marsh Posté le 12-02-2002 à 17:29:21    

:( Merci qd meme

Reply

Marsh Posté le 12-02-2002 à 19:13:40    

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]


---------------
Si t'es pas net, reste a la buvette
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed