Bonjour à tous,

quand j'écris :

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
 
template<typename PTYPE, int DIM>
  class PairSingInfo{
 
// des trucs
 
   void initializeOXYZ()
   {
      return InitializeOXYZ_impl<PTYPE,DIM>::initializeOXYZ(*this);
   }
 
  friend struct InitializeOXYZ_impl<PTYPE,DIM>;
 
//d'autres trucs
};
 
template<typename PTYPE, int DIM>
struct InitializeOXYZ_impl{};
 
template<typename PTYPE>
struct InitializeOXYZ_impl<PTYPE,2>{
  void initializeOXYZ(PairSingInfo<PTYPE,2>& p){
//des trucs
  }
};
 
template<typename PTYPE>
struct InitializeOXYZ_impl<PTYPE,3>{
  void initializeOXYZ(PairSingInfo<PTYPE,3>& p){
//des trucs
  }
};
j'obtiens l'erreur "error: ‘InitializeOXYZ_impl’ is not a class template". Cette erreur n'est pas difficile à régler : il suffit de mettre le morceau de code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
template<typename PTYPE, int DIM>
struct InitializeOXYZ_impl{};
au début. Mais pourquoi ? Le code, par exemple, se fiche que la fonction membre initializeOXYZ(PairSingInfo<PTYPE,3>& p) de InitializeOXYZ_impl soit déclarée après la déclaration de PairSingInfo ... ?