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 :

Dynamic_cast et erreur "fatal error C1001: ERREUR INTERNE DU COMPILATEUR"


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 61
    Points
    61
    Par défaut Dynamic_cast et erreur "fatal error C1001: ERREUR INTERNE DU COMPILATEUR"
    Bonjour !

    j'ai un gros projet sur lequel on travaille à plusieurs. Jusqu'à il y a quelques jours tout fonctionnait bien (enfin ça compilait et tout, y'a des bugs en cours de résolution ici et là, mais rien d'inhabituel)... IL y a une semaine tout compilait parfaitement.

    Vendredi dernier, après une semaine sans coder, je lance mon visual studio 2003. Je recompile un truc et là j'ai le message d'erreur suivant à la compilation
    fatal error C1001: ERREUR INTERNE DU COMPILATEUR
    (fichier du compilateur 'msc1.cpp', ligne 2701)
    Choisissez la commande Support technique du menu ? (Aide) de Visual C++
    ou ouvrez le fichier d'aide du Support technique pour plus d'informations
    Je fouille un peu, et là je me rend compte que cette erreur arrive partout où j'ai un dynamic_cast, alors que tout fonctionnait bien la semaine précédente et que rien n'avait été modifié dans le code.

    Je ne pense pas avoir installé quoi que ce soit perturbant le compilateur, mais est-ce que quelqu'un a une idée d'où peut venir le problème ?

    Et pour information si je remplace le dynamic_cast par un reinterpret_cast tout compile bien, et ça fonctionne correctement derrière. Mais cette erreur soudaine sur le dynamic_cast me laisse un peu perplexe ...

    Est-ce que quelqu'un a une idée ?

    Merci d'avance

    Ludovic

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    De manière générale, le recours au transtypage est le signe d'un problème de conception, généralement parce que tu as, bien souvent, décidé de gérer tes collections d'objet comme des pointeurs trop "génériques".

    C'est encore pis si tu envisages de passer par une reinterpret_cast, car ce dernier permet réellement de mentir au compilateur sur le type d'objet utilisé

    Le meilleur conseil que l'on pourrait donc te donner serait de reprendre ta conception afin d'implémenter la technique appelée "du double dispatch", voire, d'envisager un DP proche de la "chaine de responsabilités".

    Cependant, cela risque de t'obliger à presque "tout casser", et je comprendrais que tu rechignes à envisager cette solution

    Ceci étant dit...

    1- tu trouveras pas mal d'information sur l'erreur C1001 sur cette page

    2- pourrais tu nous en dire un peu plus sur ton projet
    • nous donner au minimum la fonction qui contient la ligne 2701
    • Nous donner la définition de la classe dans laquelle tu essaye de transtyper ton objet, ainsi que les classes parent
    • d'autres choses qui ne manqueront surement pas de s'avérer utiles par la suite


    En effet, à défaut de savoir exactement ce que tu fais, il nous sera très difficile de te venir en aide

  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
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Ange44 Voir le message
    Et pour information si je remplace le dynamic_cast par un reinterpret_cast tout compile bien, et ça fonctionne correctement derrière.
    Euh non. Mauvaise idée, ce sont 2 choses différentes (cf F.A.Q.).

    Essaies un clean+rebuild all. As-tu changer des options de compilation ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    Bon désolé de l'absence de réponses mais je ne sais pas pourquoi je n'ai pas reçu de mail de notification et j'ai été pris par d'autres trucs depuis...

    Concernant le dynamic_cast je peux absolument pas casser la structure. Je ne suis pas l'investigateur du projet, je ne fais qu'apporter des briques supplémentaires.

    Pour 3DArchi, je sais que c'est différent, mais là pour faire tourner rapidement mes démos avec recompilation j'avais pas eu d'autre choix ...

    Bon sinon, j'ai fait un clean, clean du cmake, clean de la génération cmake, tout regénéré, compiler et ça marche toujours pas...

    Bon par contre ça ne vient pas du projet, mais plutôt d'un pb avec mon compilateur j'ai l'impression. j'ai créé un mini projet :

    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
    class A
    {
    private:
    	int a;
    public:
    	A(void) {};
    	A(const int b) {a = b;};
    	~A(void) {};
    };
     
    #include "A.h"
     
    int main(int argc, char* argv[])
    {
    	A* a = new A(2);
    	A* c = dynamic_cast<A*>(a);
    	return 0;
    }
    Et ça me donne la même erreur :
    e:\LHoyet\Projets\test\Test\Test.cpp(10) : fatal error C1001: ERREUR INTERNE DU COMPILATEUR
    (fichier du compilateur 'msc1.cpp', ligne 2701)
    Pour info le premier exemple du lien suivant donne la même erreur :dynamic_cast

    Et pour info le fichier msc1.cpp n'est pas de mon projet et il semblerait qu'il ne soit pas sur mon ordi...

    Je tiens à préciser aussi que je suis sous Visual Studio .NET 2003. J'ai testé sous 2008 ça marche, mais comme je m'attends à la question non je peux pas passer le projet sous 2008 :S (c'est pas moi qui décide).

    Je vais tenter de réinstaller mon VS2003 pour voir...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 61
    Points
    61
    Par défaut
    Bon je confirme j'ai essayé le même code sur une autre machine et ça compile.
    Je tente de réinstaller VS et je vois ce que ça donne...

  6. #6
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    dynamic_cast nécessite que ton objet soit polymorphe, c'est à dire qu'il contienne au - une fonction virtuelle (cf ici). C'est peut être ça que n'aime pas ton compilateur. Vérifie que ta classe de base contient au - une fonction virtuelle (j'ose espérer le destructeur).

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 61
    Points
    61
    Par défaut
    Bon et ben je ne sais pas ce qui c'est passé, mais j'ai fait une désintallation/réinstallation complète de VS2003 et c'est bon tout remarche comme avant ... surement un fichier corrompu quelque part...

    Merci en tout cas d'avoir pris le temps de m'aider...

    Ludovic

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

Discussions similaires

  1. [Wamp] Erreur instantannée -> Fatal error: Maximum execution time of 30 seconds exceeded
    Par Villon dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 05/12/2012, 10h56
  2. [MySQL] Erreur Catchable fatal error suite montée de version PHP
    Par dide12 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/09/2011, 09h51
  3. Réponses: 1
    Dernier message: 22/12/2010, 13h55
  4. Réponses: 1
    Dernier message: 03/10/2009, 11h36
  5. [ASE12] mess. erreur : WARNING - Fatal Error 644 occurred at Sep 21 2007 10:27PM.
    Par padraig29 dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 28/09/2007, 16h08

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