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

MFC Discussion :

Migration VC6 -> VC8 : Erreur C2248 due à une fonction générée par le compilateur


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 40
    Par défaut Migration VC6 -> VC8 : Erreur C2248 due à une fonction générée par le compilateur
    Tout d'abord voila le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afx.h(893) : error C2248: 'CObject::CObject' : impossible d'accéder à private membre déclaré(e) dans la classe 'CObject'
            C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afx.h(553) : voir la déclaration de 'CObject::CObject'
            C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afx.h(524) : voir la déclaration de 'CObject'
            Le diagnostic s'est produit dans la fonction 'CException::CException(const CException &)' générée par le compilateur
    Comment se fait-il que le compilateur génère une fonction foireuse ?

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    t'es sur que c'est une erreur due à la migration ?

    quel est la ligne de code qui provoque cette erreur ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 40
    Par défaut
    t'es sur que c'est une erreur due à la migration ?
    Uip sûr :
    • Sous VC++6 ça compile sans problemes
    • Sous Visual Studio 2003 ça compile avec tout plein d'erreurs mais rien avoir avec cette erreur.
    • Sous Visual Studio 2005 BOOM !!!


    quel est la ligne de code qui provoque cette erreur ?
    Le problème c'est qu'il n'y a pas de ligne de code spécifique qui provoque cette erreur vu que l'erreur est provoqué par une fonction générée par le compilateur donc je ne peux pas la connaître.
    Disons que j'ai une classe UT_CException qui hérite de CException et une classe UT_CExceptionIA qui hérite de UT_CException :

    CException
    ^
    |
    UT_CException
    ^
    |
    UT_CExceptionIA

    L'erreur se produit dans une classe qui fait des
    Mais ce que je n'arrive pas à comprendre c'est pourquoi le compilateur génère une fonction CException::CException(const CException&) qui est un constructeur par recopie et qui de plus entraine des erreurs à la compilation ??

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Moi je sais lire :
    error C2248: 'CObject::CObject' : impossible d'accéder à private membre déclaré(e) dans la classe
    Donc c'est que tu utilises une classe MFC héritant de CObject ( toutes les classes MFC héritent de CObject).
    Ou bien tu utilises une classe perso héritant de CObject.

    Sinon il faut savoir que depuis VC6 , des classes comme CString ont été modifiées , intégrées avec ATL et définies avec des templates.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 40
    Par défaut
    Sinon il faut savoir que depuis VC6 , des classes comme CString ont été modifiées , intégrées avec ATL et définies avec des templates
    Oui mais ça n'a rien à voir avec ça...

    Moi je sais lire :
    error C2248: 'CObject::CObject' : impossible d'accéder à private membre déclaré(e) dans la classe
    Donc c'est que tu utilises une classe MFC héritant de CObject ( toutes les classes MFC héritent de CObject).
    Ou bien tu utilises une classe perso héritant de CObject.
    Oui ça aussi je sais lire mais malheureusement le vrai problème vient de la :
    Le diagnostic s'est produit dans la fonction 'CException::CException(const CException &)' générée par le compilateur
    Le probleme c'est que cette fonction générée par le compilateur essaye surement d'accéder à un membre privée de la classe CObject dont elle hérite. Les CException heritent de CObject !
    Donc je vois où est le problème mais je ne vois pas du tout comment le résoudre ? Comment empécher le compilateur de générée cette fonction ?
    J'espère que je ne suis pas le seul à avoir rencontré ce problème lors d'une migration de VC++6 vers VC++8 ??

    Ce problème me rend ...

    Toute aide est la bienvenue et je pense que si on trouve la réponse ça pourrait faire partie du Tuto sur la migration.

    Merci.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Je pense qu'il y a un problème de constructeur de copie: Celui de CObject semble être privé, et les CException ne définissent pas leur propre constructeur de copie, tu te retrouves à tenter d'appeler le constructeur privé-->erreur.

    Solution possible: Définir ton propre constructeur de copie pour ta classe qui hérite de CException.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. [XL-2007] "erreur 1004" due à une procédure "autofill"
    Par amauri dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2012, 14h35
  2. Réponses: 3
    Dernier message: 20/02/2009, 17h26
  3. Erreur Mismatch dans une fonction qui rempli une liste déroulante
    Par MisNiak dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/12/2008, 17h11
  4. Erreur aléatoire sur une fonction
    Par defluc dans le forum Firebird
    Réponses: 8
    Dernier message: 10/09/2007, 16h34
  5. erreur syntaxe sur une fonction pow
    Par superyoury dans le forum C
    Réponses: 3
    Dernier message: 10/06/2007, 18h16

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