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

C++ Discussion :

Pb d'affectation d'un pointeur de fonction


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut Pb d'affectation d'un pointeur de fonction
    Bonjour,

    je développe une ptite appli MCF sous visual studio 2005
    et j'ai quelques ptits soucis pour affecter un pointeur de fonction

    le pointeur est déclaré dans un fichier .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef void (CALLBACK *MON_POINTEUR)(MA_STRUCT*)
    j'ai une méthode comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void MaClasse::MaMethode(MA_STRUCT* param)
    {
    <div style="margin-left:40px">//...</div>}
    et lorsque je veux affecter mon pointeur comme ça dans une autre méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MON_POINTEUR ptCallBack;
    ptCallBack = MaClasse::MaMethode;
    le compilateur me retourne cette erreur :
    error C2440 : '=' : cannot convert from 'void (__thiscall MaClasse::*)(MA_STRUCT*)' to 'MON_POINTEUR'
    ...

    je ne vois pas bien pourquoi...
    quelqu'un pourrait-il m'aider??

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    réponse dans la FAQ SDL (partie threads)
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    merci, mais ça ne m'aide pas
    j'arrive pas à trouver le sujet de la FAQ; internet rame à mort ici, on se demande ce que font les autres sur le réseau entreprise ...

    je me suis inspirée de ça
    il me semble avoir fait ça correctement
    donc vraiment, je ne vois pas...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Par défaut
    Salut, il faut affecter au pointeur l'adresse de ta méthode (tu as oublié une indirection) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    callback = &myMethod;
    SPARK
    Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Aussi mais c'est surtout qu'un pointeur de fonction membre N'EST PAS un pointeur de fonction. Dès lors, on ne peut pas utiliser des fonctions membres là où on attend des fonctions libres.
    L'entrée de la FAQ est celle ci
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Aussi mais c'est surtout qu'un pointeur de fonction membre N'EST PAS un pointeur de fonction. Dès lors, on ne peut pas utiliser des fonctions membres là où on attend des fonctions libres.
    ah, ok
    Merci beaucoup pour la précision
    je ne connaissais pas la distinction...

    en fait, au début j'avais essayé en déclarant la fonction MaMethode comme une fonction non membre,
    l'affectation du pointeur de fonction, ça allait

    mais le soucis c'était que,
    ce pointeur, je dois le passer en paramètre d'une méthode d'une dll pour permettre le rappel cyclique de la méthode affectée au pointeur...
    et je n'avais aucun rappel cyclique...

    un essai avait été fait d'implémenter ladite dll en c++/cli,
    le rappel cyclique fonctionnait mais on avait des soucis avec les variables ramenées dans la méthode...
    c'est pour ça qu'on voulait tester une implémentation en natif...

    mais comme je n'y connais pas grand chose en c++,
    je patauge un ptit peu...

    d'autres suggestions??...

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/02/2009, 16h08
  2. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37
  3. Matrice de pointeurs de fonctions
    Par sebduth dans le forum C
    Réponses: 15
    Dernier message: 18/07/2003, 14h03
  4. [Kylix] Pointeur de fonctions
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 03/07/2003, 10h17
  5. pointeur de fonction
    Par kardath dans le forum C
    Réponses: 4
    Dernier message: 28/12/2002, 14h39

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