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 :

Pointeur de fonction


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 96
    Points
    96
    Par défaut Pointeur de fonction
    Bonjour !

    J'essaie de manipuler une fonction via un pointeur...

    Soit la fonction
    bool AjouterItemDico(UnicodeString);

    Soit le pointeur
    bool (*Ptr)(UnicodeString);

    Soit l'affectation
    Ptr=&AjouterItemDico;

    Pourquoi j'ai le message d'erreur suivant ?
    E2034 Cannot convert 'bool (* (_closure )(UnicodeString))(UnicodeString)' to 'bool (*)(UnicodeString)'

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Je ne connais pas ton environnement de développement et il y a un mot que je ne comprends pas (_closure ) mais j'ai l'impression que tu as un problème de convention d'appel (genre tu donnes pointeur de fonction membre et c'est un pointeur de fonction libre qui est attendu)

    Tu peux donner un peu plus d'info sur la fonction (sa déclaration) et sur ton environnement de dev ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  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
    Ce vieux fil répond à ta question?

  4. #4
    Membre régulier
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 96
    Points
    96
    Par défaut
    Merci pour vos commentaires !

    RAM-0000, t'as raison : j'ai pas explicité l'environnement de la ligne problématique. La fonction en question est une méthode dans une classe.

    3DArchi, l'exemple que tu produis se rapproche de mon problème

    En cherchant à partir du mot _closure, j'ai trouvé l'explication suivante, où il est
    dit que :On ne peut pas passer une fonction membre non statique d'une classe à un paramètre du type "pointeur de fonction".

    http://www.cpptalk.net/pointeur-de-f...n-vt27334.html

    Pour résumer mon problème, ce que j'essaie de faire c'est de passer un pointeur d'une méthode de la classe A comme argument de construction
    de la classe B (distincte càd qui n'est pas héritée de A). Et là ça passe pas.

    Mais notez bien que ça plante dès l'affectation Ptr=&AjouterItemDico;

    Alternativement, je pourrais déclarer une classe friend de l'autre mais je trouvais pratique l'accès par pointeur...

  5. #5
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Si c'est une fonction membre d'une classe A, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bool (A::* Ptr)(UnicodeString);
    pour ton pointeur, si je ne m'abuse.
    Ou utiliser un truc moderne du genre boost.function

  6. #6
    Membre régulier
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 96
    Points
    96
    Par défaut
    Merci Alp,

    Effectivement ça passe avec : Ptr=&ObjMachin::AjouterItemDico;

    Mais alors à l'autre bout y'a un problème.

    Car si dans l'objet A j'essaie de créer un objet B comme ceci :
    OB= new ObjetB (Ptr);
    afin d'avoir accès à la méthode de la classe A depuis la classe B, alors
    je devrais ajouter l'entête de Classe A dans le constructeur de la classe B ?
    Sans quoi B ne sait pas ce qu'est l'objet A dont on lui refile un pointeur de fonction.

    Et là pour le coup, je reviens au problème d'inclure l'entête de A pour B, afin
    de les déclarer en friend;
    Mon objectif initial étant de limiter au maximum, les interférences, voyez-vous ?

  7. #7
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Il faudrait que tu détailles un peu ton architecture pour qu'on puisse mieux t'aider. Les objets A et B ont-ils besoin de se connaîtres ? D'ailleurs est-ce-que ce sont les classes qui doivent se connaître ou est-ce-que se sont des instances qui doivent se référencer ? As-t-u besoin d'une instance de A pour faire ce que tu veux ?

    Sur un plan purement technique, tu peux utiliser un pointeur de fonction habituel avec une méthode de classe (déclarée static, et que l'on peut appeler grâce à la classe), peut-être que cela peut résoudre ton problème.

Discussions similaires

  1. opengl et pointeur de fonction
    Par Oldhar dans le forum C
    Réponses: 5
    Dernier message: 06/11/2003, 23h56
  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