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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut pointeur de fonction
    Bonjour, j'ai un soucis sur un pointeur de fonction. Voici mon code pour expliquer mon problème (la balise CODE ne marche pas sur mon PC...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    class A
    {
      private :
     
      int * ordi;     // les 6 cases du camp de l'ordinateur
      int * hum;      // les 6 cases du camp de l'humain
      int * ordi_hum; // les 6 cases du camp de l'ordinateur suivies des 6 cases du camp de l'humain
     
      public :
     
      int nbpionordinateur(void);
      int nbpionhumain(void);
    + d'autres fonctions
    }
     
    ordi_hum est un tableau à 12 éléments, et
     
    ordi=&ordi_hum[0];
    hum=&ordi_hum[6];
     
    class B
    {
      A a;
      il y a d'autres champs
     
      public :
      int toto(void);
      + d'autres fonctions
    }
     
    A la fin de mon fichier B.h j'ai ceci :
    typedef int (*nbpionsjoueur)(void);
     
    voici mon problème : dans mon fichier b.cpp : 
     
    Etat Partie::Jouer(Joueur jou,int n)
    {
     Joueur joueur1, joueur2;
     int * camp1, * camp2;
     nbpionsjoueur nbpionsjoueur1, nbpionsjoueur2;
     int numcase[6]; 
     int i,sum=0,sem,nbgraines;
     
     if(jou==ORDINATEUR)
     {
       joueur1=ORDINATEUR;
       joueur2=HUMAIN;
       camp1=moncale.getcampordi();
       camp2=moncale.getcamphum();
       nbpionsjoueur1 = a.nbpionordinateur();  // ici ca plante : comment faire un pointeur de fonctions ??
       nbpionsjoueur2 = a.nbpionhumain();
     }
     else
     {
       joueur1=HUMAIN;
       joueur2=ORDINATEUR;
       camp1=moncale.getcamphum();
       camp2=moncale.getcampordi();
       nbpionsjoueur1 = a.nbpionhumain();
       nbpionsjoueur2 = a.nbpionordinateur();
     }
     
    blabla
    }
    Merci d'avance et excusez-moi encore du fait que la balise CODE ne marche pas...

  2. #2
    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
    Il faut faire un type "pointeur de fonction membre" ou bien pointer vers des fonctions statiques.
    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.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut,
    peux-tu s'il te plait me donner un exemple de type pointeur de fonction membre ?

    Merci d'avance

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int (MaClasse::*)(char,float)
    est le type d'un pointeur d'une fonction membre de MaClasse, qui retourne un entier et qui prend en argument un char et un float.

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Si tu veux définir un nom de type pour désigner un tel pointeur de fonction membre, il te suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef int (MaClasse::*FctMembreMaClasse)(char,float);
    Et ainsi, le type "FctMembreMaClasse" désigne un pointeur vers une fonction membre du type donné dans mon post précédent.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut,
    merci de tes exemples. J'avoue que je n'ai jamais vu cette syntaxe.
    Je vais l'essayer ce soir !

    Merci encore

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Si tu veux un truc qui marche quel que soit le type de la classe, et qui puisse aussi contenir l'objet, et qui marche en fait avec n'importe quel foncteur, il faut utiliser un foncteur polymorphe comme boost::function.

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