VERY URGENT !!!!!!! c++ utulisation des template pour un class liste - Programmation
Marsh Posté le 11-02-2002 à 20:01:53
ton "tete" il est déclaré comment?
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;
}
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??
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]
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..
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 . 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]
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