Bonjour,

J'ai récupéré un code que je souhaite faire tourner sur ma machine.

Ce code a été réalisé sous Linux, compilé via le compilateur GNU et utilise le Hash_set de la GNU STL.

Pour ma part, je développe en Visual Studio C++ (compliateur Vc7). J'ai vu qu'il existait une classe Hash_set définie pour le compilateur Vc7. J'ai essayé de l'utiliser mais cela ne fonctionne pas. Etant débutant en C++, j'avoue ne pas comprendre extrêment bien le rôle de ce hash_set et donc, ne pas comprendre no plus comment débugger pour faire tourner mon code sous Windows.

Voici le code original (qui compile sous Linux avec le compilateur GNU):
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
27
28
29
30
31
32
33
 
#include <ext/hash_set>
#include <ext/hash_map>
 
using namespace __gnu_cxx;
 
template<class _T>
class hash_compare_for_pairs {
private:
   typedef pair<vector<_T>,_T> Key;
public:
   static const size_t bucket_size = 4;
   static const size_t min_buckets = 20000;
   size_t operator()(const Key & k) const {
      size_t h = 0;
      for( int i = 0; i<k.first.size(); i++ ) 
         h = ((h<<1) | ((h>>31) & 1)) ^ (long)k.first[i];
      return h;
   };
};
 
template<class _T>
class equalkey_for_pairs {
private:
   typedef pair<vector<_T>,_T> Key;
public:
   bool operator()(const Key & k1, const Key & k2) const
   {
      return (k1.first == k2.first) && (fabs(k1.second-k2.second) <= alphadist);
   };
};
 
hash_set<pair<vector<double>,double>, hash_compare_for_pairs<double>, equalkey_for_pairs<double> > history;
Dans mon propre code (sous Visual Studio C++), j'ai simplement changé les include et le namespace utilisé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
#include <hash_set>
#include <hash_map>
 
using namespace stdext;
et ca ne marche pas... Voici une partie des erreurs indiquée :
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
 
D:\Microsoft Visual Studio .NET 2003\Vc7\include\hash_set(22) : error C2903: 'rebind' : le symbole n'est ni un modèle de classe ni un modèle de fonction
        D:\Microsoft Visual Studio .NET 2003\Vc7\include\xhash(156) : voir la référence à l'instanciation du modèle de classe 'stdext::_Hset_traits<_Kty,_Tr,_Alloc,_Mfl>' en cours de compilation
        with
        [
            _Kty=std::pair<std::vector<double>,double>,
            _Tr=hash_compare_for_pairs<double>,
            _Alloc=equalkey_for_pairs<double>,
            _Mfl=false
        ]
        D:\Microsoft Visual Studio .NET 2003\Vc7\include\hash_set(55) : voir la référence à l'instanciation du modèle de classe 'stdext::_Hash<_Traits>' en cours de compilation
        with
        [
            _Traits=stdext::_Hset_traits<std::pair<std::vector<double>,double>,hash_compare_for_pairs<double>,equalkey_for_pairs<double>,false>
        ]
        fp.cpp(89) : voir la référence à l'instanciation du modèle de classe 'stdext::hash_set<_Kty,_Tr,_Alloc>' en cours de compilation
        with
        [
            _Kty=std::pair<std::vector<double>,double>,
            _Tr=hash_compare_for_pairs<double>,
            _Alloc=equalkey_for_pairs<double>
        ]
D:\Microsoft Visual Studio .NET 2003\Vc7\include\hash_set(22) : error C2039: 'rebind' : n'est pas membre de 'equalkey_for_pairs<_T>'
        with
        [
            _T=double
        ]
D:\Microsoft Visual Studio .NET 2003\Vc7\include\hash_set(22) : error C2143: erreur de syntaxe : absence de ';' avant '<'
D:\Microsoft Visual Studio .NET 2003\Vc7\include\hash_set(22) : error C2039: 'other' : n'est pas membre de 'operator``global namespace'''
D:\Microsoft Visual Studio .NET 2003\Vc7\include\hash_set(23) : error C2238: jetons inattendus avant ';'
D:\Microsoft Visual Studio .NET 2003\Vc7\include\xhash(168) : error C2039: 'allocator_type' : n'est pas membre de 'stdext::_Hset_traits<_Kty,_Tr,_Alloc,_Mfl>'
        with
        [
            _Kty=std::pair<std::vector<double>,double>,
            _Tr=hash_compare_for_pairs<double>,
            _Alloc=equalkey_for_pairs<double>,
            _Mfl=false
        ]
D:\Microsoft Visual Studio .NET 2003\Vc7\include\xhash(168) : error C2146: erreur de syntaxe : absence de ',' avant l'identificateur 'allocator_type'
D:\Microsoft Visual Studio .NET 2003\Vc7\include\xhash(168) : error C2065: 'allocator_type' : identificateur non déclaré
D:\Microsoft Visual Studio .NET 2003\Vc7\include\xhash(168) : error C2976: 'std::list' : nombre d'arguments de modèle insuffisant
...
Qq'un peut-il m'aider svp à paramétrer tout ça ?