bonsoir à tous , bon j'ai fait une fait une classe file générique (avec une classe noeud générique).
Je veux tester cette classe en faisant file<complexe> fr.enfiler(c1(2,7)) , avec c1 est un complexe et jai declaré la classe complexe.
Le problème que cette classe fonctionne avec les types prédéfinies comme (int , char ,...)
mais avec par ex complexe ,elle ne marche pas.
bon veuillez m'aider à résoudre ce problème.
voici le code:
#include<iostream.h>
class complexe
{
private:
float re,im;
public:
complexe();
complexe(float);
complexe(float ,float);
~complexe();
complexe operator+(complexe);
friend complexe operator+(complexe,float);
complexe operator*(complexe);
};
// implémentation de complexe
#include"complexe.h"
complexe::complexe()
{}
complexe::complexe(float x,float y)
{
re=x;
im=y;
}
complexe::~complexe(){}
complexe::complexe(float x)
{
re=x;
im=0;
}
complexe complexe::operator +(complexe c)
{
complexe d(re+c.re,im+c.im);
return(d);
}
complexe complexe::operator *(complexe c)
{
complexe d(re*c.re,im*c.im);
return (d);
}
// noeud:
#include "complexe.h"
template <class T>
class noeud
{
private:
T info;
noeud<T> * suiv;
public:
noeud(T, noeud<T>* =NULL);
~noeud();
T getinfo() const;
noeud<T>* getsuiv() const;
void setsuiv(noeud<T>* s);
};
template <class T>
noeud<T>::noeud(T x,noeud<T>* s)
{
info=x;
suiv=s;
}
template <class T>
noeud<T>::~noeud(){}
template <class T>
T noeud<T>::getinfo() const
{ return info;}
template <class T>
noeud<T>* noeud<T>::getsuiv() const
{
return suiv;
}
template <class T>
void noeud<T>::setsuiv(noeud<T>* s)
{
suiv=s;
}
// file
#include"noeud.h"
template <class T>
class file
{
private:
noeud<T> * tete;
public:
file();
~file();
void enfiler(T);
T defiler();
friend ostream& operator<< (ostream&, const file<T>&);
};
template <class T>
file<T>::file()
{
tete=NULL;
}
template <class T>
file<T>::~file()
{
if (tete != NULL)
{
noeud<T>* parc;
noeud<T>* prec;
parc = tete;
while(parc != NULL)
{
prec=parc;
parc = parc->getsuiv();
delete prec;
}
}
}
template <class T>
void file<T>::enfiler(T x)
{
if (tete == NULL)
tete = new noeud<T>(x);
else
{ noeud<T>* parc = tete;
while(parc->getsuiv()!=NULL)
parc= parc->getsuiv();
parc->setsuiv(new noeud<T>(x));
}
}
template <class T>
T file<T>:: defiler()
{
T x=tete->getinfo();
noeud<T>*parc=tete;
tete=tete->getsuiv();
delete parc ;
return x;
}
template <class T>
ostream & operator << (ostream& o,const file<T> &f)
{
noeud<T>* p;
p=f.tete;
while(p!=NULL)
{
o<<p->getinfo();
p=p->getsuiv();
if(p!=NULL)
o<<"->";
}
return o;
}
// void main
#include"file.h"
void main()
{
file<int> fr;
file<complexe>fr1;
complexe c1(1,2);
fr.enfiler(2);
fr.enfiler(2);
fr.enfiler(2);
fr.enfiler(2);
fr1.enfiler(c1);/// erreur
cout<<fr<<endl;
}