Template

cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005 - 13 mai 2004 à 16:21
Nicosoft Messages postés 1 Date d'inscription mardi 2 avril 2002 Statut Membre Dernière intervention 16 juin 2005 - 16 juin 2005 à 14:59
Bonjour,

j'ai voulu ecrire un ensemble de fonctions templates, et ca marche pas, pq j'ai plusieurs fonctions qui portent le meme nom et qui sont definies plusieurs fois : error C2995 template function as already been defined et error C2954 template function cannot nest.

Une idee ?
Merci

#include "commun.h"

// Fonction d'écriture et de lecture dans des fichiers texte à partir de PILEs
// Chaque ligne du fichier correpond à un élément de la PILE passée en paramètre

// Toutes les fonctions sont templatées !

// Implémentée pour :
//
// * PILEs "simples" :
// - PILE <T>
// * Points (2D et 3D) :
// - PILE < TPoint2D <T> >
// - PILE < TPoint3D <T> >
// * Segments (2D et 3D) :
// - PILE < Seg2D >
// - PILE < Seg3D >

/*------------------------------------------------------------------------------------
PILEs "simples"
------------------------------------------------------------------------------------*/

// Lecture :
template <class T> TChaine LireFichier(PILE <T> pile);
template <class T> TChaine LireFichier(PILE <T> pile , TChaine Nomfichier);

// Ecriture :
template <class T> TChaine EcrireFichier(const PILE <T> & pile);
template <class T> TChaine EcrireFichier(const PILE <T> & pile , TChaine Nomfichier);

/*------------------------------------------------------------------------------------
PILEs de Points (2D et 3D)
------------------------------------------------------------------------------------*/

// Lecture :
template <class T> TChaine LireFichier(PILE < TPoint2D <T> > pile);
template <class T> TChaine LireFichier(PILE < TPoint2D <T> > pile , TChaine Nomfichier);
template <class T> TChaine LireFichier(PILE < TPoint3D <T> > pile);
template <class T> TChaine LireFichier(PILE < TPoint3D <T> > pile , TChaine Nomfichier);

// Ecriture :
template <class T> TChaine EcrireFichier(const PILE < TPoint2D <T> > & pile);
template <class T> TChaine EcrireFichier(const PILE < TPoint2D <T> > & pile , TChaine Nomfichier);
template <class T> TChaine EcrireFichier(const PILE < TPoint3D <T> > & pile);
template <class T> TChaine EcrireFichier(const PILE < TPoint3D <T> > & pile , TChaine Nomfichier);

/*------------------------------------------------------------------------------------
PILEs de segments (2D et 3D)
------------------------------------------------------------------------------------*/

// Lecture :
template <class T> TChaine LireFichier(PILE <Seg2D> pile);
template <class T> TChaine LireFichier(PILE <Seg2D> pile , TChaine Nomfichier);
template <class T> TChaine LireFichier(PILE <Seg3D> pile);
template <class T> TChaine LireFichier(PILE <Seg3D> pile , TChaine Nomfichier);

// Ecriture :
template <class T> TChaine EcrireFichier(const PILE <Seg2D> & pile);
template <class T> TChaine EcrireFichier(const PILE <Seg2D> & pile , TChaine Nomfichier);
template <class T> TChaine EcrireFichier(const PILE <Seg3D> & pile);
template <class T> TChaine EcrireFichier(const PILE <Seg3D> & pile , TChaine Nomfichier);

8 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 mai 2004 à 00:32
ta vu ce que ta ecris?

// Ecriture :
template <class T> TChaine EcrireFichier(const PILE <Seg2D> & pile);
template <class T> TChaine EcrireFichier(const PILE <Seg2D> & pile , TChaine Nomfichier);
template <class T> TChaine EcrireFichier(const PILE <Seg3D> & pile);
template <class T> TChaine EcrireFichier(const PILE <Seg3D> & pile , TChaine Nomfichier);

pourquoi tu specifie template <class T> ?
0
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
14 mai 2004 à 01:24
merci, j'ai vu cette erreur, mais ca me met toujours un message d'erreur ... les memes : C2995 et C2954 (cf. 1er post)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 mai 2004 à 07:02
j'avou que c'est tres bizar

tu les definie ou les fonctions templates?

a la limite ne les declare pas, c'est pas plus mal vu que de toute facon elles doivent etre definies dans un entete
0
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
14 mai 2004 à 11:22
j'ai un .h avec toutes les declarations (le 1 er post), et un .cpp avec les definitions. rien ne passe. j'aimerais bien y arriver qd meme !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 mai 2004 à 19:15
tu ve dire que tu definie les fonction template dans les .cpp?

ben ca passera jamais ca, les templates ca amene une succesion de controle statique, ca peut pas etre compilé separement

fait comme j'ai dit

"...de toute facon elles doivent etre definies dans un entete "

et tien moi au courant, pour moi il n'y a pas collision de nom, ces fonction sont toutes differentes et pour etre sur j'ai testé avec g++
0
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
14 mai 2004 à 19:35
ben ecoute, j'ai essaye aussi avec les definitions dans le .h, et rien a faire, ca passe pas ... ca viendrait du compilo (VC6) ???

sinon, j'ai "resolu" le pb en surchargeant, mais ca oblige a definir plein de fonctions et c'est pas super elegant. je reste donc preneur d'infos.

merci
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 mai 2004 à 20:06
c'est possible, vc++ 6.0 n'est pas 100% compatible avec le standard c++ et je crois meme que les probleme viennent surtout des templates

une solution, utilise devcpp ou vc++ 2003 ou le service pack de vc6 (ca je suis pas sur)
0
Nicosoft Messages postés 1 Date d'inscription mardi 2 avril 2002 Statut Membre Dernière intervention 16 juin 2005
16 juin 2005 à 14:59
coucou
0
Rejoignez-nous