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 :

erreur C2084 : comment y remédier ?


Sujet :

MFC

  1. #1
    LMA
    LMA est déconnecté
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut erreur C2084 : comment y remédier ?
    Bonjour à tous !
    Voilà, je fais appel à la macro IMPLEMENT_DYNCREATE2 à plusieurs reprises dans un fichier cpp de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IMPLEMENT_DYNCREATE2(CidsChap03KPage6::Cids03K6Grd2, Cids03K6Grd2, CidsBrowserView)
    Les deux premiers paramètres sont des Grid, des grilles quoi.
    L'appel à la macro fonctionne (de même que la macro) puisque pour le premier Grid, je n'ai aucun souci.

    Et lorsque je compile, voilà mes erreurs :
    cs03kpg6.cpp(1303) : error C2084: la fonction 'CRuntimeClass *_GetBaseClass(void)' a déjà un corps
    cs03kpg6.cpp(582)*: voir la définition précédente de '_GetBaseClass'
    cs03kpg6.cpp(1303) : error C3861: '_GetBaseClass': identificateur introuvable, même avec une recherche qui dépend de l'argument

    Je suis sûr que les 2 erreurs sont liées.
    Pour info, _GetBaseClass est une classe utilisée dans la macro (celle-ci a été redéfinie dans un header).
    Je me suis renseigné un peu sur cette erreur C2084, et apparemment il n'y a pas de réel moyen de la résoudre, seulement quelques astuces pour la contourner (le cast, en fait).
    Je veux bien caster, mais je vois pas trop comment.

    Sinon, je me demandais s'il existait un moyen de renommer temporairement une classe (pas de refactoring svp), pour tester un peu.

    Je précise que mon projet consiste à migrer mon programme de VS6 à VS2003, d'où l'apparition de cette erreur.

  2. #2
    LMA
    LMA est déconnecté
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut Des nouvelles du front
    Non, ne vous bousculez pas pour me répondre, y aura de la place pour tout le monde !
    Bon, trève de plaisanterie sérieuse, j'ai essayé de renommer _GetBaseClass (qui en fait est une méthode (c'était d'une logique imparable mais des fois je suis trèèèèèèèèèès lent à la comprenelle) mais on s'en fout puisque...) ça marche pas. Ca, c'est fait.

    Bon, je vous avouerais qu'on s'en fout pas tant que ça que ça soit une méthode, puisqu'elle a un type (int), et que donc je devrais pouvoir caster.

    Dites, si je mets une photo de fille sexy, quelqu'un consentirait à me répondre, ne serait-ce que pour commenter la photo ? Je me sentirais un peu soutenu au moins...

  3. #3
    mat.M
    Invité(e)
    Par défaut
    Quel est le but du projet ?
    Pourquoi toucher aux macros IMPLEMENT_DYNCREATE2 ?
    Ce sont les assistants qui les génère.
    Pour les migrations de VC6 à vs2005 Farscape a fait un tutorial je crois
    Sinon renommer une classe c'est absolument impossible.
    On la définit une bonne fois pour toute dans le code

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut Re: Des nouvelles du front
    Citation Envoyé par LMA
    Non, ne vous bousculez pas pour me répondre, y aura de la place pour tout le monde ! [...] Dites, si je mets une photo de fille sexy, quelqu'un consentirait à me répondre, ne serait-ce que pour commenter la photo ? Je me sentirais un peu soutenu au moins...
    Les membres qui fréquentent les forums, ainsi que l'équipe de modération, répondent bénévolement aux questions. Il n'y a pas d'exigence à avoir sur la rapidité des réponses, chacun fait ce qu'il peut (pour l'équipe de modération) et ce qu'il veut (pour les membres). Et si personne n'a la réponse pour l'instant on ne va pas poster des messages pour dire "désolé j'ai pas la réponse"

    Pour ce que j'ai pu trouver sur le pb, le compilo n'accepte plus les spécialisations multiples de template d'où le message d'erreur de définitions multiples :
    http://msdn2.microsoft.com/en-us/library/xs4hat8z.aspx

  5. #5
    mat.M
    Invité(e)
    Par défaut Re: erreur C2084 : comment y remédier ?
    Citation Envoyé par LMA
    Et lorsque je compile, voilà mes erreurs :
    cs03kpg6.cpp(1303) : error C2084: la fonction 'CRuntimeClass *_GetBaseClass(void)' a déjà un corps
    cs03kpg6.cpp(582)*: voir la définition précédente de '_GetBaseClass'
    cs03kpg6.cpp(1303) : error C3861: '_GetBaseClass': identificateur introuvable, même avec une recherche qui dépend de l'argument
    On ne peut pas accèder à GetBaseClass car cela doit être une méthode déclarée en private d'une classe donc inaccessible.
    Désolé de répondre à la volée pas trop le temps.
    Il y a le code source des MFC

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Citation Envoyé par mat.M
    Pour les migrations de VC6 à vs2005 Farscape a fait un tutorial je crois
    http://farscape.developpez.com/

  7. #7
    LMA
    LMA est déconnecté
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut Re: Des nouvelles du front
    Wahou !!! Que de réponses !!! Merci à tous ! Apparemment les filles sexe ça marche
    Pour une fois que je suis pas là, vous postez tous pour me répondre, ça sent le complot.

    Mon projet consiste à migrer un logiciel propriétaire (environ 1500 fichiers cpp, et autant de .h) de VS6 à VS2003 (et non 2005 mat.M). Alors évidemment je ne connais presque rien du code puisque je n'ai pas fait ce logiciel. Ils ont eu besoin de modifier la macro, je ne sais pas pourquoi, et plus personne dans l'entreprise ne le sait maintenant, désolé.


    Citation Envoyé par bigboomshakala
    Les membres qui fréquentent les forums, ainsi que l'équipe de modération, répondent bénévolement aux questions. Il n'y a pas d'exigence à avoir sur la rapidité des réponses, chacun fait ce qu'il peut (pour l'équipe de modération) et ce qu'il veut (pour les membres). Et si personne n'a la réponse pour l'instant on ne va pas poster des messages pour dire "désolé j'ai pas la réponse"
    En fait je disais cela parce que j'ai laissé un message il y a quelques jours (concernant une autre erreur) et on ne m'a jamais répondu. Mais pas de souci, je ne disais pas cela méchamment, sinon ça se serait vu

    Citation Envoyé par bigboomshakala
    Pour ce que j'ai pu trouver sur le pb, le compilo n'accepte plus les spécialisations multiples de template d'où le message d'erreur de définitions multiples :
    http://msdn2.microsoft.com/en-us/library/xs4hat8z.aspx
    Oui, j'avais déjà vu qu'on ne pouvait résoudre cette erreur, j'ai tenté quelques trucs mais (évidemment) en vain, alors je voulais savoir si vous aviez une idée pour contourner le problème, la dernière solution quoi.

    Encore merci à tous pour vos réponses, je pense que je vais tenter de pas avoir à appeler cette macro, on verra si je m'en sors.

  8. #8
    mat.M
    Invité(e)
    Par défaut Re: Des nouvelles du front
    Citation Envoyé par LMA
    Wahou !!! Que de réponses !!! Merci à tous ! Apparemment les filles sexe ça marche
    On n'a rien vu encore....

    On ne sait tjs pas quel est le but du projet

  9. #9
    LMA
    LMA est déconnecté
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut Re: Des nouvelles du front
    Citation Envoyé par mat.M
    On n'a rien vu encore....
    C'est l'art de ne rien montrer pour avoir des info

    Citation Envoyé par mat.M
    On ne sait tjs pas quel est le but du projet
    Le but de mon projet, c'est de migrer un logiciel propriétaire de VS6 à VS2003. Si tu veux savoir ce que fait ce logiciel, ça va te paraître chiant : il permet de faire des calculs concernant des transformateurs (nombre de radiateurs, impédance, devis, etc...). La macro, je sais pas pourquoi elle est appelée, je sais pas pourquoi ils l'ont modifiée, je sais juste qu'elle pose des problèmes et qu'elle fait bien c****.

  10. #10
    mat.M
    Invité(e)
    Par défaut Re: Des nouvelles du front
    Citation Envoyé par LMA
    Si tu veux savoir ce que fait ce logiciel, ça va te paraître chiant : il permet de faire des calculs concernant des transformateurs (nombre de radiateurs, impédance, devis, etc...). La macro, je sais pas pourquoi elle est appelée, je sais pas pourquoi ils l'ont modifiée, je sais juste qu'elle pose des problèmes et qu'elle fait bien c****.
    Pas du tout .
    C'est passionnant les calculs sur les transfos et impédances , condensateurs ( y-a-til des condos ? ) !


    Ce genre de macro on n'y touche pas du tout elles sont générées par les assistants de VC++
    En fait je me suis mal exprimé; ce n'est pas le but du projet mais le pourquoi du comment.
    C'est l'intégration d'un composant grille ?

  11. #11
    LMA
    LMA est déconnecté
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut
    Oui, c'est pour inclure des grilles.
    En fait, quand il y a une seule grille à insérer, tout va bien, mais dès qu'il y en a deux (ou plus bien sûr), vu que la macro est déjà définie, il m'affiche l'erreur.
    C'est dommage, je suis en alternance alors je peux pas montrer la macro cette semaine, mais je la laisserais peut-être à mon retour en entreprise, si ça peut t'aider.

  12. #12
    LMA
    LMA est déconnecté
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut
    Bon, comme promis, voilà la macro, en espérant que cela puisse aider (même si, à vrai dire, j'en doute) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #define IMPLEMENT_DYNCREATE2(full_class_name, class_name, base_class_name) \
    	CObject* PASCAL full_class_name::CreateObject() \
    		{ return new full_class_name; } \
    	CRuntimeClass* PASCAL _GetBaseClass() \
    		{ return RUNTIME_CLASS(base_class_name); } \
    	const AFX_DATADEF CRuntimeClass full_class_name::class##class_name = { \
    		#full_class_name, sizeof(class full_class_name), 0xFFFF, full_class_name::CreateObject, \
    			&_GetBaseClass, NULL }; \
    	CRuntimeClass* full_class_name::GetRuntimeClass() const \
    		{ return RUNTIME_CLASS(class_name); } \
    Et voici un exemple d'appel à cette macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IMPLEMENT_DYNCREATE2(CidsChap03KPage6::Cids03K6Grd2, Cids03K6Grd2, CidsBrowserView)

  13. #13
    LMA
    LMA est déconnecté
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut
    Bon, ben finalement j'ai réussi à bien contourner le problème : je ne passe plus par cette macro, comme ça elle ne me cause plus d'ennuis !
    Merci à tous d'avoir passé un peu de temps à vouloir m'aider.

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/10/2011, 14h12
  2. Duplication code css, comment y remédier ?
    Par sunshine33 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 26/04/2006, 14h53
  3. [Erreur] SQL1040N: comment proceder ?
    Par FzF dans le forum DB2
    Réponses: 3
    Dernier message: 12/04/2006, 09h39
  4. [HTML] espace indésiré en deux cellule, comment y remédier?
    Par samuelMB dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/04/2006, 21h11
  5. Programme figer ? comment y remédier
    Par jamesb dans le forum C++Builder
    Réponses: 6
    Dernier message: 25/11/2004, 20h58

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