Templace c++ ==> URGENT svp

Signaler
Messages postés
18
Date d'inscription
dimanche 19 février 2006
Statut
Membre
Dernière intervention
13 avril 2006
-
Messages postés
18
Date d'inscription
dimanche 19 février 2006
Statut
Membre
Dernière intervention
13 avril 2006
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Pour les classes templates, tu dois écrire l'implémentation dans les fichiers .h, ca vient peut être de la
Messages postés
18
Date d'inscription
dimanche 19 février 2006
Statut
Membre
Dernière intervention
13 avril 2006

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