Dragohn Posted February 6, 2006 Share Posted February 6, 2006 Bonjour, Je me tourne vers vous car je cale complétement là. J'ai 3 fichiers: MaClasse.h: déclaration de ma classe et des variables/fonctions membres MaClasse.cpp: implémentation des fonctions membres de ma classe, je fais bien un #include "MaClasse.h" en début de fichier. Main.cpp: je fais un #include "MaClasse.h" et j'utilise MaClasse dans mon programme. A la compilation tout est OK, mais à la construction de l'.exe, j'ai le droit à main.obj : error LNK2019: unresolved external symbol "fonction" et ce pour chaque fonction de MaClasse que j'appelle dans le main. Je sais que ca signifie qu'au moment de la construction, le compilo ne trouve pas la référence à la fonction indiquée. Ce que je ne comprends pas, c'est pourquoi il ne trouve pas, alors que je fais bien un include du .h dans le Main.cpp. Là où je je comprends encore moins, c'est qu'avec une autre classe ça marche très bien! Si quelqu'un pouvait m'éclairer Link to comment Share on other sites More sharing options...
yuyugs84 Posted February 6, 2006 Share Posted February 6, 2006 Par le plus grand des hasards, utiliserais-tu code::blocks et le compilateur borland ?? je viens d'avoir et de résoudre le même prob en ajoutant manuellement mes librairies dans : build--> compiler option Puis dans l'onglet : linker Tu fais "add" et tu recherches le repertoire contenant les .lib Tu les ajoutes toutes... et voilou... Link to comment Share on other sites More sharing options...
Dragohn Posted February 6, 2006 Author Share Posted February 6, 2006 Non, j'ai testé sous Visual C++6, 2005 et DevCPP4, et à chaque fois le même problème Pour information je vous met le code, pour montrer que vraiment il n'y a rien de particulier: CElement.h #ifndef __CELEMENT_H__ #define __CELEMENT_H__ template <class T> class CElement { private: T Element; CElement<T> *pNext; public: CElement(void); CElement(T); // Accesseurs T getElement() const; CElement<T> *getNext() const; //Mutateurs void setElement(const T); void setNext(CElement<T>); }; #endif CElement.cpp #include "CElement.h" #include <iostream> template <class T> CElement<T>::CElement(T elt):Element(elt), pNext(NULL) { } template <class T> CElement<T>::CElement():pNext(NULL) { } template <class T> T CElement<T>::getElement() const { return Element; } template <class T> CElement<T> *CElement<T>::getNext() const { return pNext; } template <class T> void CElement<T>::setElement(const T elt) { Element = elt; } template <class T> void CElement<T>::setNext(CElement<T> next) { pNext = next; } Main.cpp #include "CElement.h" #include <iostream> int main(void){ CElement<int> Tmp; Tmp.setElement(20); std::cout<<Tmp.getElement()<<"Ok"; } Voilà, vous voyez je ne fais pas d'appel à quoi que soit d'extérieur de particulier, c'est juste une bête classe finalement. Je ne comprends donc vraiment pas l'erreur renvoyé. Edit: Ayant remarqué que seules mes classes comportant des template posaient problème, j'ai cherché de ce côté. Je viens de m'apercevoir que j'avais oublié que les template ne pouvaient pas être séparés en .h et .cpp mais que la déclaration + l'implémentation devaient se trouver ensemble dans le fichier d'en tête. Désolé pour cette erreur stupide! Merci pour le coup de main tout de même Link to comment Share on other sites More sharing options...
titerion Posted February 7, 2006 Share Posted February 7, 2006 Met resolu dans le sujte qu'on sache Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.