Bonjour,
J'ai dans un header un code semblable à celui-ci.
Quelque part dans un header de base la macro USE_UNORDERED est définie. En principe donc le type MySet est de type boost::unordered_set<>.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #ifdef USE_UNORDERED #include "boost/unordered_set.hpp" #else #include <set> #endif class MyClass { #ifdef USE_UNORDERED typedef boost::unordered_set<SomeClass, SomeClass_hash, SomeClass_equal> MySet; #else typedef std::set<StrEnum> MySet; #endif MySet f_set; public: MyClass(): f_set() {} // <-- ici f_set est vu comme un std::set<> template<typename Tr> void Init(Tr tr) { f_set.clear();// <-- ici, comme un boost::unordered_set<> ... } };
Ailleurs dans le code j'ai une classe qui instancie MyClass, mais curieusement elle instancie le membre f_set comme étant un std::set<> et non pas comme un boost::unordered_set<>.
Puis, plus loin dans le code, lorsque l'instance en question éxecute sa méthode MyClass::Init(tr) f_set est de type boost::unordered_set<>. Bien sûr, là ça plante.
En bref, une même instance est tantôt d'un type tantôt de l'autre, comme si la macro USE_UNORDERED n'était pas "vue" à tout moment par le (pré-)compilateur. Et pourtant l'instantiation et le code se trouvent dans un même cpp, tous les headers étant déclarés au début.
Je n'arrive pas à déterminer ou est l'erreur dans mon code (l'ordre de déclaration des headers par exemple), si erreur il y a...
J'utilise visual studio 2005 et 2010, la même erreur se produisant avec les deux compilateurs. Je n'utilise pas la précompilation des entêtes.
Merci de m'éclairer.
Partager