Probleme d'inclusion de fichier (.hpp Vs .cpp)?

ano2345 Messages postés 18 Date d'inscription dimanche 9 novembre 2008 Statut Membre Dernière intervention 22 décembre 2008 - 22 déc. 2008 à 13:20
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 - 29 déc. 2008 à 11:52
Bonjour a tous,

Je suis en train de developper sous Dev-C++ 4.9.9.2 une classe template MyVector basee sur la classe vector de telle maniere que je puisse y ajouter mes propres operations standards telle que generer un vecteur de moyennes glissantes a partir d'un vecteur initial.
Le fichier MyVector.hpp declare la classe MyVector, le fichier MyVector.cpp definit les fonctions de la classe MyVector, et le fichier TestMyVector.cpp permet de tester l'utilisation de cette classe
J'ai 2 problemes que je n'ai pas si j'utilise une classe non template alors qu'il apparaissent avec la classe template:

1) Directive #include "MyVector.hpp" dans TestMyVector.cpp:
dans le fichier TestMyVector.cpp, j'ai une erreur de linkage quand j'utilise la directive #include "MyVector.hpp" Cette erreur disparait lorsque j'utilise a la place #include "MyVector.cpp" a la place. Dans tous les exemples que j'ai vus jusqu'a present, le fichier qui sert a tester la classe inclut toujours la declaration (.hpp) et non la definition (.cpp) de la classe. Quelqu'un peut-il m'expliquer pourquoi ca ne marche pas quand j'utilise une classe template (encore une fois ca marchait quand la classe n'etait pas template)

2) overloading de l'operateur <<:  
L'overloading de << fonctionnait parfaitement quand la classe n'etait pas template. Mais quand je passe a une classe template, j'obtiens egalement une erreur de linkage.

Je n'ai malheureusement pas reussi a copier les 3 fichiers dans ce mail. Est-ce que quelqu'un aurait malgre tout une idee de la source de ces 2 problemes et pourquoi passer d'une classe non template (contenant un membre vector<float>) a une classe template (contenant un membre template<class T> vector<T>) pose probleme?

Merci d'avance pour votre aide,
Ano

1 réponse

cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
29 déc. 2008 à 11:52
1. Ton implémentation doit être dans le fichier d'interface, à moins que ton compilo ne supporte la clause "export", mais je n'en connais aucun qui le fait...
2. Implémente ton opérateur << dans l'interface de la classe.

Ainsi, ça devrait fonctionner.
Bon courage !
0
Rejoignez-nous