Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1376 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Problème avec les pointeurs de fonctions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Problème avec les pointeurs de fonctions

n°1195923
Ryle Hunte​r
Posté le 09-09-2005 à 13:56:49  profilanswer
 

Bonojur, je suis en train d'essayer de developper une interface graphique, et je me suis retrouvé bloqué qur un pont auquel je ne m'attendais pas du tout...
 
J'ai quelques soucis avec des passages de fonction...
 
 
voici en simplifié ce que donne mes classes
 

Citation :


class touche
{
 
 void OnEvent()
 void* UserFonction()
 
 
}
 
touche::  OnEvent
{
  //...
     UserFonction();
     //...
}
 
 
class Container
{
   //...
 touche touche1;
 void OnTouch()   ;
 void actiontouche1();
 //...
}
 
 
 
Container::Container
{
 
touche1.UserFonction=actiontouche1;
 
}
 
Container::OnTouch()
{
//...
touche1.OnEvent();
 //...
}
 
Container::  actiontouche1
{
  //...
 
}


 
Le container est une classe non statique qui contient plusieurs objets de type touche, ce que voudrais arriver a faire c'est à pouvoir affecter a chaque touche une action definie par l'utilisateur dans le container.
Le problème c'est que le compilateur refuse d'affecter la valeur du pointeur, et j'ai absolument besoin que la fonction utilisateur soient un membre du container afin de pouvoir agir sur n'importe quel objet.
 
Mon problème ce situe au niveau du  "touche1.UserFonction=actiontouche1;" le compilateur me jette en indiquant une incompatibilité (compilateur C++ avec juste les fonctions de la norme de base), j'ai éssayé différent ecritures, cast, mais rien a faire ca passe pas, j'ai cru lire quelque chose la dessus avec les delegates, mais ca me semble une usine a gaz et je suis pas tout a fait sur que c'est ce qu'il me faut...
 
Merci d'avance :jap:

mood
Publicité
Posté le 09-09-2005 à 13:56:49  profilanswer
 

n°1196348
capigloo1
Posté le 10-09-2005 à 00:26:14  profilanswer
 

En C++, on utiliserait plutôt le polymorphisme.
Ta conception résulte d'une vision procédurale, héritée du C. A repenser.

n°1196480
Taz
bisounours-codeur
Posté le 10-09-2005 à 12:56:15  profilanswer
 

http://forum.hardware.fr/hardwaref [...] 3190-1.htm
 
tout le monde te remercie d'avoir fait une recherche.

n°1197047
Ryle Hunte​r
Posté le 11-09-2005 à 14:18:57  profilanswer
 

capigloo1->
 
Effectivement je me suis remis au c++ il y a pas tres longtemps, mais bon la j'ai p-e trop simplifié mes classes, car en realité j'utilise pas mal le polymorphisme, mais dans mon cas (je crois) ca ne peut pas m'aider.
 
Taz->
 
Je fréquente hfr depuis suffisament longtemps pour connaitre les regles, et quand j'ai fait mes recherche je suis pas tombé dessus , y'a une masse de topic ou les pointeur apparaissent et le moteur de recherche ne permet plus de specifier de date de recherche. Enfin Bref je me suis p-e aussi mal expliqué sur ce que je voulais (désolé), car pour moi ton exemple ne resoud pas mon problème.
 
je vais tenter de reprendre tout ca:
 
J'ai:
 
- une classe "Ecran Globale" qui me permet d'ouvrir, de fermer des fenetres et d'envoyer un evenement a la fenetre active. (les fenetre sont crées dynamiquement, ce ne sont pas des objets statiques!)
 
- une classe "objet de base" qui definit en virtuel toute les fonctions des objets
        - En dérive: une classe "touche"
        - En derive: une classe "fenetre"  
                      - en derive une classe "fenetre util 1","fenetre util 2"... qui peut contenir plusieurs objets touche
 
le but de mon systeme est de garder les classe "ecran" et "fenetre" en fixe et n'avoir qu'a rejouter des fenetres util.
 
Lors d'un evenement, l'objet ecran appelle la fonction correspondante de la fenetre util en cours via une fonction de base de la classe fenetre. Cette fonction parcourt la liste des objets de base la fenetre util et appelle la fonction virtuelle d'appui de touche de l'objet concerné. Jusque la pas de problème tout marche bien.
 
Le probleme est que vu que j'ai pas envie d'avoir a rederiver chaque objet touche pour avoir des actions différente, j'utilise la classe directement dans la fenetre util, mais je veux qu'en plus de la fonction de base d'appui touche il m'en execute une autre définie dans la "fenetre util" qui la contient.
 
Pour ce faire j'avais pensé a mettre dans ma classe de base des pointeur vers des fonction qui seraient affecté lors du constructeur de la fenetre utilisateur.
Le probleme est que si j'ai des modifications a faire sur des autres objets de la fenetre il faut que ce pointeur pointe sur une fonction membre et c'est la que ca passe pas...
 

Citation :


// ma classe de base dont derive tout mes objets
classe ObjBase
{
 
 virtual void OnEvent();           // la fonction d'evenement
 void* UserFonction() ;           // le pointeur vers une fonction utilisateur quelconque
 
}
 
// l'objet fenetre de base
class Objfenetre : ObjBase
{
    ObjList    Items;   //contient des pointeurs vers des ObjBase
 
    void OnEvent()   //la fonction d'evenement
                   {
                      //... //parcourt des objets                    
                    Items.OnEvent();  // appel a la fonction virtuelle de l'objet de base
                     }
}
 
// la fenetre crée par l'utilisateur
class FenetreUser : Objfenetre
{
 
ObjTouche Touche1; //la touche qu'il contient
void AppuiTouche(); //fonction utilisateur lancé lors de l'appui touche
FenetreUser()         //contructeur
                    {
                    Touche1.UserFonction=AppuiTouche;  //affectation de la fonction, c'est la que ca bloque
                    }
}
 
class ObjTouche : ObjBase  
{
 void OnEvent() //la fonction d'evenement
                     {
                      if (UserFonction!=NULL) // si la fonction utilisateur existe...
                           UserFonction();
                      }    
 
}
 
 


 
voila j'espère que mon problème est plus clair :jap:

n°1197224
capigloo1
Posté le 11-09-2005 à 19:31:07  profilanswer
 

Voir Vol. 1 de "Thinking in C++" de Bruce Eckel:
http://www.janiry.com/bruce-eckel/
Chapitre 11, "Pointers to member functions"

n°1198740
Ryle Hunte​r
Posté le 13-09-2005 à 17:07:52  profilanswer
 

:jap: merci je vais regarder ca!

n°1198744
Taz
bisounours-codeur
Posté le 13-09-2005 à 17:13:58  profilanswer
 

on va pas te faire tes devoirs : mon exemple devrait te suffir à comprendre la syntaxe, ce qui représente le seul problème aux pointeurs de fonctions membres


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Problème avec les pointeurs de fonctions

 

Sujets relatifs
Problème sur les pieces jointes avec CDONTS[Word]Problème d'ouverture d'un document RTF
probleme de loader par loadmovie - flash mx 2004Problème script qcm en php
[CSS] Problème avec hover & activeProbleme avec un setInterval
[RESOLUE] probleme de calcul de date sous access 2002.[RESOLU]probleme regroupage fichiers texte
Problème de crt0.o[resolu] batch : Probleme copie fichier
Plus de sujets relatifs à : [C++] Problème avec les pointeurs de fonctions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR