Templace c++ ==> URGENT svp

najla1986 Messages postés 18 Date d'inscription dimanche 19 février 2006 Statut Membre Dernière intervention 13 avril 2006 - 28 févr. 2006 à 13:15
najla1986 Messages postés 18 Date d'inscription dimanche 19 février 2006 Statut Membre Dernière intervention 13 avril 2006 - 28 févr. 2006 à 15:01
bonjour, j'ai un dossier a rendre pour mes cours et j'ai un soucis concernant l'utilisation de mes template. c'est donc a l'appel des methode du template que j'obtien des erreur de link
voici mon code :



Classe Template



#include

template<class T>

class Vecteur

{

protected:

T *data;

int nbElem;

int *index;

public:

Vecteur();

Vecteur(int n);

~Vecteur(void){delete data;delete index;}

T& operator[](int i){return *(data+i);}

void setElement(T& elm);

void deleteElement(int num);

void affichevect(void);

void getIndex(void);

int getnbElem(){return nbElem};

};



template<class T>

class VecteurTrie:public Vecteur<T>

{

//friend ostream& operator<<(ostream& m,const VecteurTrie<T>& t);

private:

T *tmp;

public:

VecteurTrie();

VecteurTrie(int n);

~VecteurTrie(void){delete tmp;}

VecteurTrie& operator= (const VecteurTrie<T>& vect);

void Tri(void);



//friend ostream& operator<<(ostream& m,VecteurTrie<T> & t);

};



#endif





Classe AdresseEMail



#include<string>

#include<fstream>

#include

using namespace std;

#include<stdlib.h>



class InvalidMailAdressException{};



class AdresseEMail

{

...

private:

static unsigned int num;

string identifiant;

string provider;

int compS(AdresseEMail aem);

filebuf fichier;

char nomFichier[20];

int CheckFormatEMail(string adr);

public:

AdresseEMail();

AdresseEMail(string ide,string pro);

AdresseEMail(const AdresseEMail &aem);

~AdresseEMail();



string getIdentifiant() const {return identifiant; }

string getProvider() const {return provider; }



void setIdentifiant(const string ide) {identifiant = ide; }

void setProvider(const string pro) {provider = pro; }

void setEMail(string&);

...

};

#endif





Classe Message

class message

{

private:

unsigned int numero;

AdresseEMail * expediteur;

VecteurTrie destinataire;

bool urgent; // 1 urgent, 0 pas urgent

bool statut; // 1 lu, 0 pas lu

string sujet;

string texte;

int NbDest;



public:

message ();

message(const message &);

~message ();



//APPEL DES FONCTIONS SET

void setExpediteur(string& e);

void setDestinataire(string& d);

void setUrgent(bool u);

void setStatut(bool s){statut=s;}

void setSujet (string s);

void setTexte(string t){texte=t;}

void setNbDest(int n){NbDest=n;}

//COMPOSITION MESSAGE

void compExpediteur();

void compDestinataire();

void composer();

...

};



Voici les codes de mes deux méthodes de la classe Message posant le problème


void message::setDestinataire(string & d)
{
AdresseEMail ad;
ad.setEMail(d);
//destinataire.setElement(ad); // POSE PROBLEME !!!! //
}

void message::affiche()
{
cout << endl<< "Message" << getNumero();

if (getUrgent() == 0)
cout << " Non-Urgent" << endl<< endl;
else
cout << " Urgent" << endl<< endl;

cout << "Expediteur : " << expediteur->toString() << endl;
cout << endl << "Destinataire : ";
//destinataire.affichevect(); // POSE PROBLEME !!!! //

cout << endl << "Sujet : " << getSujet() << endl << getTexte();

cout << endl << endl << "Statut du message : " ;
if (getStatut() ==0)
cout << " Non Lu" << endl<< endl;
else
cout << " Lu" << endl<< endl;
}

Voici les message d'erreur :

Linking...
Message.obj : error LNK2019: unresolved external symbol "public: void __thiscall Vecteur<class AdresseEMail>::setElement(class AdresseEMail &)" (?setElement@?$Vecteur@VAdresseEMail@@@@QAEXAAVAdresseEMail@@@Z) referenced in function "public: void __thiscall message::setDestinataire(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?setDestinataire@message@@QAEXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)

Message.obj : error LNK2019: unresolved external symbol "public: void __thiscall Vecteur<class AdresseEMail>::affichevect(void)" (?affichevect@?$Vecteur@VAdresseEMail@@@@QAEXXZ) referenced in function "public: void __thiscall message::affiche(void)" (?affiche@message@@QAEXXZ)

C:\Documents and Settings\***\Mes documents\Cours\C++\Dossier\InpresMail\Debug\InpresMail.exe : fatal error LNK1120: 2 unresolved externals

Dans le code de mon fichier Vecteur.cpp pour le templace j'ai ajouté a la fin du fichier l'instruction :

template class VecteurTrie ;

Merci pour votre réponse

2 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 févr. 2006 à 14:30
Pour les classes templates, tu dois écrire l'implémentation dans les fichiers .h, ca vient peut être de la
0
najla1986 Messages postés 18 Date d'inscription dimanche 19 février 2006 Statut Membre Dernière intervention 13 avril 2006
28 févr. 2006 à 15:01
bien vu... ca a résolu mon problème de link merci beaucoup !!

j'aurai une autre question, je dois sauvegarder cette classe message dans un fichier, quelqu'un aurait une technique pour le template ? car je recherche comment sauvegarde un classe contenant un template mais je ne trouve pas.. cela se fait-il automatiquement comme un tableau ? merci pour vos réponses
0
Rejoignez-nous