#ifndef EQUIVALENCE_OBJECT_HPP #define EQUIVALENCE_OBJECT_HPP #include template<typename T1, typename T2> class EquivalenceObject { public: EquivalenceObject(); EquivalenceObject(T1 v1, T2 v2); void add(T1 v1, T2 v2); private: std::pair<T1, T2> _eqTable; }; #include "EquivalenceObject.hxx" #endif
#include template<typename T1, typename T2> EquivalenceObject<T1, T2>::EquivalenceObject() : _eqTable() { } template<typename T1, typename T2> EquivalenceObject<T1, T2>::EquivalenceObject(T1 v1, T2 v2) : _eqTable(v1, v2) { } template<typename T1, typename T2> void EquivalenceObject<T1, T2>::add(T1 v1, T2 v2) { // ??? }
Cet ID qu'ont les composantes sont des int pour l'instant. Je vais par contre avoir besoin de réutiliser ma classe Equivalence pour d'autre type d'ID dans d'autres méthodes. (Donc pas de mélange de type dans le vector)
Tu pourrais m'en dire plus la dessus :
EquivalenceObject.hxx (Attention, le code template ne va pas dans un .cpp ! Il va dans un header spécial séparé).
Ton code à l'air de marcher à une exception près, pair n'est pas reconnu :
PS : Je sais pour les namespace mais j'ai trop de source à modifier pour changer ça, ce sera pour la prochaine promis.
EquivalenceObject.hxx (Attention, le code template ne va pas dans un .cpp ! Il va dans un header spécial séparé).
Techniquement, ton erreur n'est pas du aux templates, mais au fait que tu fasses un new sur une variable qui n'est en rien un pointeur.
#include template<typename T1, typename T2> class EquivalenceObject { public: EquivalenceObject(); EquivalenceObject(T1 v1, T2 v2); private: pair<T1, T2> _eqTable; };
src/equivalenceAlgorithm.hpp:14: error: ISO C++ forbids declaration of ‘pair’ with no type
src/equivalenceAlgorithm.hpp:14: error: expected ‘;’ before ‘<’ token
src/equivalenceAlgorithm.cpp: In constructor ‘EquivalenceObject<T1, T2>::EquivalenceObject()’:
src/equivalenceAlgorithm.cpp:6: error: class ‘EquivalenceObject<T1, T2>’ does not have any field named ‘_eqTable’
src/equivalenceAlgorithm.cpp: In constructor ‘EquivalenceObject<T1, T2>::EquivalenceObject(T1, T2)’:
src/equivalenceAlgorithm.cpp:11: error: class ‘EquivalenceObject<T1, T2>’ does not have any field named ‘_eqTable’
EquivalenceObject eqTable;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJ'ai toujours pas compris l'histoire des templates dans le .hxx. On y met quoi dans ce fichier?
Lorsque je veux créer un objet de type EquivalenceObject dans un main quelconque, j'include mon .hpp et j'écris ça n'est-ce pas?
EquivalenceObject eqTable;