fonctions template

fonctions template - C++ - Programmation

Marsh Posté le 14-05-2004 à 00:23:30    

salut,
 
j'ai besoin d'ecrire des fonctionsqui traitent des types differents, donc template. mais, je voudrais avoir plusieurs fonctions ayant le meme nom, et ca, ca compile pas ... une idee ?
 
 

Code :
  1. #include "commun.h"
  2. // Fonction d'écriture et de lecture dans des fichiers texte à partir de PILEs
  3. // Chaque ligne du fichier correpond à un élément de la PILE passée en paramètre
  4. // Toutes les fonctions sont templatées !
  5. // Implémentée pour :
  6. //
  7. //      * PILEs "simples" :
  8. //          - PILE <T>
  9. //      * Points (2D et 3D) :
  10. //          - PILE < TPoint2D <T> >
  11. //          - PILE < TPoint3D <T> >
  12. //      * Segments (2D et 3D) :
  13. //          - PILE < Seg2D >
  14. //          - PILE < Seg3D >
  15. /*------------------------------------------------------------------------------------
  16.                                 PILEs "simples"
  17. ------------------------------------------------------------------------------------*/
  18. // Lecture :
  19. template <class T> TChaine LireFichier(PILE <T> pile , TChaine Nomfichier = "" );
  20. // Ecriture :
  21. template <class T> TChaine EcrireFichier(const PILE <T> & pile , TChaine Nomfichier = "" );
  22. /*------------------------------------------------------------------------------------
  23.                                 PILEs de Points (2D et 3D)
  24. ------------------------------------------------------------------------------------*/
  25. // Lecture :
  26. template <class T> TChaine LireFichier(PILE < TPoint2D <T> > pile , TChaine Nomfichier);
  27. template <class T> TChaine LireFichier(PILE < TPoint3D <T> > pile , TChaine Nomfichier);
  28. // Ecriture :
  29. template <class T> TChaine EcrireFichier(const PILE < TPoint2D <T> > & pile , TChaine Nomfichier);
  30. template <class T> TChaine EcrireFichier(const PILE < TPoint3D <T> > & pile , TChaine Nomfichier);
  31. /*------------------------------------------------------------------------------------
  32.                                 PILEs de segments (2D et 3D)
  33. ------------------------------------------------------------------------------------*/
  34. // Lecture :
  35. template <class T> TChaine LireFichier(PILE <Seg2D> pile , TChaine Nomfichier);
  36. template <class T> TChaine LireFichier(PILE <Seg3D> pile , TChaine Nomfichier);
  37. // Ecriture :
  38. template <class T> TChaine EcrireFichier(const PILE <Seg2D> & pile , TChaine Nomfichier);
  39. template <class T> TChaine EcrireFichier(const PILE <Seg3D> & pile , TChaine Nomfichier);


 
merci d'avance

Reply

Marsh Posté le 14-05-2004 à 00:23:30   

Reply

Marsh Posté le 14-05-2004 à 00:26:46    

file le message d'erreur et la ligne à laquelle elle se produit stp.
 
rentre la tête dans les épaules et ouvre la bouche aussi.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-05-2004 à 00:31:33    

l'erreur se produit dans le .cpp :
 
error C2995: 'LireFichier' : template function has already been defined
        C:/Documents And Settings/Olivier/Bureau/enteteIO.h(24) : see declaration of 'LireFichier'
C:\Documents and Settings\Olivier\Bureau\enteteIO.cpp(91) : error C2954: template definitions cannot nest
C:\Documents and Settings\Olivier\Bureau\enteteIO.cpp(108) : error C2995: 'EcrireFichier' : template function has already been defined
        C:/Documents And Settings/Olivier/Bureau/enteteIO.h(26) : see declaration of 'EcrireFichier'
C:\Documents and Settings\Olivier\Bureau\enteteIO.cpp(134) : error C2954: template definitions cannot nest
C:\Documents and Settings\Olivier\Bureau\enteteIO.cpp(152) : error C2954: template definitions cannot nest
C:\Documents and Settings\Olivier\Bureau\enteteIO.cpp(181) : error C2954: template definitions cannot nest
C:\Documents and Settings\Olivier\Bureau\enteteIO.cpp(199) : error C2954: template definitions cannot nest
 
voila ...

Reply

Marsh Posté le 14-05-2004 à 00:35:44    


relis toi


Message édité par skelter le 14-05-2004 à 00:38:34
Reply

Marsh Posté le 14-05-2004 à 00:38:31    

y'a  
template <class T> TChaine LireFichier(PILE <T> pile , TChaine Nomfichier = "" );
 
et  
template <class T> TChaine LireFichier(PILE < TPoint2D <T> > pile , TChaine Nomfichier);  
 
on voit que la première "englobe" aussi la seconde.
Y'a un machin qui s'appelle la spécialisation de templates, mais je sais pas si ça marche pour les fonctions (les règles pour les classes et les fonction sont un poil différentes). Et je me souviens plus comment ça s'écrit (si y'a un truc pour).
 
je te conseille de mettre "typename" à la place de "class"  
 
dans tes template <class T>.
 
Formellement c'est pareil, mais à la lecture ça montre bien que c'est pas forcément une classe qu'on attend mais un type quelconque.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-05-2004 à 00:45:53    

bon, pour les typename, OK, mais ca change pas grand chose. je vais tacher de jeter un oeil sur la specialisation.
 
sinon, j'ai bien penser que definir une fonction template sur des types non instancies etait un peu couillon. cela dit, le compilo fait toujours la gueule ...

Reply

Marsh Posté le 14-05-2004 à 01:07:06    

merci pour le "relis toi" skelter, mais tu pourrai pas etre plus precis ?

Reply

Sujets relatifs:

Leave a Replay

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