Bonjour,

Je suis assez peu familier avec les template et je me retrouve confronté à un problème :

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
 
.h 
 
template<class DT> class PP2DCID_Data : public PP2DCID_BaseData
{
     public:
          PP2DCID_Data(PP2DCID_Element* pce, PP2DCID_Id I) : PP2DCID_BaseData(pce,I){};
          bool Read(TStream*);
          inline DT* GetData() { return &dt; };
 
     private:
          DT dt;
};
 
class PP2DCID_MultiData : public PP2DCID_BaseData
{
     public:
          PP2DCID_MultiData(PP2DCID_Element* pce, PP2DCID_Id I):  PP2DCID_BaseData(pce,I){};
          virtual ~PP2DCID_MultiData();
          virtual bool Read(TStream* ps)=0;
 
     protected:
          unsigned int uiN; 
          vData Datas;
          template<class DT> PP2DCID_Data<DT>* MandatoryGet(TStream* ps);
 
};
 
.cpp
 
template<class DT> PP2DCID_Data<DT>* PP2DCID_MultiData::MandatoryGet(TStream* ps)
{
     PP2DCID_Data<DT>* pDDT;
 
     pDDT = dynamic_cast<PP2DCID_Data<DT>* > (CreateElement(ps));
     if (!pDDT) throw Exception("Other Data Type expected");
 
     return pDDT;
}
Voilà le code tel qu'il est réellement. Il n'est évidement pas entier et je peux rajouter les parties qui manquent si cela est utile.

J'ai C++ builder 5. La compilation meurt sur la ligne du fichier .cpp "template<class DT> PP2DCID_Data<DT>* PP2DCID_MultiData::MandatoryGet(TStream* ps)"
L'erreur reportée est "[C++ Erreur fatale] Format_PP2D_CID.cpp(692): F1004 Erreur du compilateur interne at 0x128a12c with base 0x1200000".

Si quelqu'un pouvait m'aider...

Merci.