File

mimosa803 Messages postés 345 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 24 avril 2010 - 27 févr. 2007 à 21:40
cs_azamharir Messages postés 55 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 1 novembre 2008 - 27 févr. 2007 à 22:54
http://www.cppfrance.com/auteurdetail.aspx?ID=982982
 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.

2 réponses

mimosa803 Messages postés 345 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 24 avril 2010
27 févr. 2007 à 21:47
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
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<getinfo();
   p=p->getsuiv();
   if(p!=NULL)
    o<<"->";
  }
 return o;
 }  
 
// void main
#include"file.h"
void main()
{
  file 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;
}
0
cs_azamharir Messages postés 55 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 1 novembre 2008
27 févr. 2007 à 22:54
salut
le probleme est ds la fct :
template <class T> ostream & operator << (ostream& o,const file<T> &f)
tu dois definir le : o<getinfo(); pour un complexe.
ajoute ça ds la classe complexe :
float complexe::get_re()
{
    return re;
}
float complexe::get_im()
{
    return im;
}

puis ajoute cette fct globale :
ostream& operator<<(ostream& s, complexe &c)
{
    s << c.get_re() << "\t"<< c.get_im() <<endl;
    return s;
}
ça marche pr moi.
0
Rejoignez-nous