Bonjour,
Dans la série template et C++ j'ai un problème que je n'arrive pas à résoudre. Je me tourne alors vers la communauté Dev.com pour avoir votre avis sur la question.
Le code :
Vector2PartionHasher.h
SearchTreePlane.h
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 template< uint32 iXHash, uint32 iYHash > class RoadNodePartitionHasher { public: static uint32 Hash( RoadNode const& oRoadNode ) { // blabla } static uint32 Hash( RoadNode const* pRoadNode ) { // blabla } };
Et le problème viens de là :
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 #define DEF_TYPE typedef std::list< T* > PtrTypeList template < class T > class SearchTreePlaneNode { protected: DEF_TYPE; uint32 m_iKey; PtrTypeList m_oDatas; SearchTreePlaneNode< T >* m_pLeft; SearchTreePlaneNode< T >* m_pRight; public: SearchTreePlaneNode(); ~SearchTreePlaneNode(); // blabla... private: void Insert( uint32 iKey, T const* pData ); }; template < class T, class Hasher > class SearchTreePlane : SearchTreePlaneNode< T > { DEF_TYPE; public: SearchTreePlane(); ~SearchTreePlane(); void Insert( T const* pData ) { SearchTreePlaneNode<T>::Insert(Hasher::Hash( pData ), pData); } };
L'idée c'est comme vous pouvez le voir j'ai un arbre binaire de recherche qui prend pour clef un unsigned int, cet uint32 je l'obtient via un hasher qui est dans une classe qui contient uniquement des méthodes static avec soit des T const& soit des Tconst*.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 RoadNode* pRoadNodeRet = new RoadNode; // Plus haut // SearchTreePlane< RoadNode, RoadNodeHasher > m_oRoadNodeBSTree m_oRoadNodeBSTree.Insert( pRoadNodeRet );
Le problème c'est que VC++ ne trouve pas le hasher il me dit :
Error 16 error C2665: 'eMV::RoadNodePartitionHasher<iXHash,iYHash>::Hash' : none of the 2 overloads could convert all the argument types
Dans RoadNodePartitionHasher il le pRoadNodeRet n'est ni un const RoadNode&, ni un const RoadNode*, ni un RoadNode&, ni un RoadNode* !
Merci
Partager