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 :

[VC2005] Comment caster correctement ?


Sujet :

MFC

  1. #1
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut [VC2005] Comment caster correctement ?
    Bonsoir,

    dans le fichier cpp de mon application , j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BEGIN_MESSAGE_MAP(CGavrocheApp, CWinApp)
     
    	ON_COMMAND(ID_TM_SAUVEGARDER_TRJ, &GavrocheApp::SauvegarderTrajectoireManuelleTRJ)
     
    END_MESSAGE_MAP()
    pour répondre à un clic dans un menu.

    dans l'entête, j'ai déclaré comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    afx_msg bool SauvegarderTrajectoireManuelleTRJ();


    ça passait en VC6, ça passe pour une autre fonction située deux lignes plus haut, et là j'ai l'erreur :

    error C2440: 'static_cast' : cannot convert from 'bool (__thiscall CGavrocheApp::* )(void)' to 'AFX_PMSG'
    Cast from base to derived requires dynamic_cast or static_cast
    j'ai tenté ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BEGIN_MESSAGE_MAP(CGavrocheApp, CWinApp)
     
    	ON_COMMAND(ID_TM_SAUVEGARDER_TRJ, static_cast<bool>(&CGavrocheApp::SauvegarderTrajectoireManuelleTRJ) )
     
    END_MESSAGE_MAP()
    ou ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BEGIN_MESSAGE_MAP(CGavrocheApp, CWinApp)
     
    	ON_COMMAND(ID_TM_SAUVEGARDER_TRJ, static_cast<AFX_PMSG>(&CGavrocheApp::SauvegarderTrajectoireManuelleTRJ) )
     
    END_MESSAGE_MAP()
    mais rien n'y fait

    comment lui plaire ...
    Philippe

  2. #2
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut,

    essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    reinterpret_cast<AFX_PMSG>(&CGavrocheApp::SauvegarderTrajectoireManuelleTRJ)
    sinon le bon vieux CAST en C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (AFX_PMSG)(&CGavrocheApp::SauvegarderTrajectoireManuelleTRJ)
    @+

  3. #3
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    la 1ère réponse était la bonne !

    bravo et merci pour cette réponse fulgurante

    Philippe

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Perdu, les deux réponses étaient fausses.

    La bonne réponse est: Le type de retour doit être void et pas bool.
    Et normalement, la macro doit passer sans cast (parce qu'elle contient déjà un static_cast<>).
    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.

  5. #5
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    merci pour ta remarque, logique d'ailleurs en y repensant.

    Philippe

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

Discussions similaires

  1. [C#] Comment utiliser correctement Stream.Read ?
    Par ArChAnGe76 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/12/2005, 20h48
  2. [CSS] Positionnement float, comment clearer correctement ?
    Par Séb. dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 02/11/2005, 16h35
  3. Comment Caster une variable en perl?
    Par kiza dans le forum Langage
    Réponses: 8
    Dernier message: 21/10/2005, 12h33
  4. Comment utiliser correctement le debugger de DevCPP
    Par Le Furet dans le forum Dev-C++
    Réponses: 2
    Dernier message: 29/09/2005, 09h56

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