IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Fonction template, erreur interne du compilateur


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Par défaut Fonction template, erreur interne du compilateur
    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.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Une erreur interne est un bug du compilateur. Parfois il arrive qu'en ré-écrivant différemment la partie du code concernée, cela résolve le problème. Sinon il faut changer de compilateur.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    2 pistes :
    1/ essaies de définir ta méthode dans la déclaration de la classe (dans le .h)
    2/ Testes ton code avec un autre compilateur. Peut-être celui-ci ne crashera pas mais te sortira des erreurs plus explicites sur un problème d'écriture de ton code.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Par défaut
    Merci à vous deux.

    Il me semblait aussi que c'était une mauvaise implémentation du standard C++, mais comme je l'ai dit, je ne suis pas au top avec les template et je doutais un peu de la validité de la syntaxe que j'ai employée (syntaxe peu évidente, il faut bien le dire, contrairement au reste du C++).

    Changer de compilateur, même à des fins de tests, est simplement inconcevable avec ce programme écrit en C++ builder. Il y a bien trop de choses qui lui sont propres (TStream, AnsiString, ...). C'est vrai que c'est beaucoup mieux de ce point de vue quand on écrit en C++ standard, mais c'est tellement plus long...

    L'erreur a disparue en déplaçant l'implémentation de la fonction template incriminée dans le .h. Cela a le mérite de fonctionner même si ce n'est pas satisfaisant intellectuellement parlant. Mais bon, les programmes ne sont pas que de la théorie.

    Merci encore.

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    T'avais séparé définition et déclaration? (dans un .hpp et un .cpp ???)

  6. #6
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    L'erreur a disparue en déplaçant l'implémentation de la fonction template incriminée dans le .h. Cela a le mérite de fonctionner même si ce n'est pas satisfaisant intellectuellement parlant. Mais bon, les programmes ne sont pas que de la théorie.
    Il faut mettre l'implémentation des templates dans le .h. Il y a un autre fil sur le forum là-dessus, et une entrée dans la FAQ .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/06/2010, 11h37
  2. Erreur interne compilateur visual basic
    Par freerider74 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 15/03/2010, 09h26
  3. Réponses: 26
    Dernier message: 28/01/2010, 12h53
  4. [BOOST] erreur interne du compilateur
    Par venomelektro dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 15/04/2006, 18h08
  5. Réponses: 3
    Dernier message: 13/08/2004, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo