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 :

Passer une fonction d'une classe virtuelle en parametre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 11
    Par défaut Passer une fonction d'une classe virtuelle en parametre
    Bonjour à tous,

    j'ai un petit souci. J'essaye de lier une fonction d'une classe virtuelle dans une autre classe. Donc je dois pouvoir la passer en paramètre et l'enregistrer pour l'appeler lorsque j'en ai besoin.


    Comment dois-je procéder ?
    J'essaye plus ou moins de cette manière là (j'espère ne pas avoir fait trop d'erreur en représentant le code) mais codeblocks m'inquide ceci comme erreur..

    d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\functional|539|error: no match for 'operator*' in '*__ptr'|
    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
    //myClassVirtual.hpp
    class myClassVirtual
    {
    	public:
    		myClassVirtual();
    }
     
    //myClassVirtual.cpp
    #include "myClassVirtual.hpp"
     
    myClassVirtual::myClassVirtual()
    {
    	//c_tor
    }
     
    //////////////////////////////////////////////////////////////////////
    //myClass1.hpp
    #include "myClassVirtual.hpp"
    #include "myClass2.hpp"
    #include <functional>
    class myClass1 : public myClassVirtual
    {
    	public:
    		myClass1();
    		void myfunction()
    	private:
    		myClass2 class2;
    }
     
    //myClass1.cpp
    #include "myClass1.hpp"
     
    myClass1::myClass1() : myClassVirtual(), class2( &myClass1::myfunction )
    {
    	//c_tor
    }
     
    void myClass1::myfunction()
    {
    	std::cout<<"prout"<<std::endl;
    }
    }
     
    //////////////////////////////////////////////////////////////////////
    //myClass2.hpp
    #include "myClassVirtual.hpp"
    #include <functional>
    class myClass2{
    	public:
    		myClass2( std::function<void( myClassVirtual& )> );
    	private:
    		std::function<void( myClassVirtual& )> m_myfunction;
    }
     
    //myClass2.cpp
    #include "myClass2.hpp"
    myClass2::myClass2( std::function<void( myClassVirtual& )> myfunction)
    {
    	m_myfunction = myfunction;
    }
    }

    Merci de votre explication

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    pour "callbacker" une fonction membre, il faut un objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template< class T >
    struct Foncteur
    {
     typedef void(T::*fct)();
     Foncteur(T* _pObj, fct method) : obj(_pObj), meth(method) {}
     void Call() { obj->(*meth)(); }
     // ou bien un void operator()() { (obj->meth)(); }
     T* obj;
     fct meth;
    };
    A la louche de mémoire sans compilo sous la main.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 11
    Par défaut
    à la ligne 4 ils me disent :

    error: creating pointer to member function of non-class type 'void(myClassVirtual&)'|

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Passer un paramètre d'une fonction dans une autre
    Par Invité dans le forum MATLAB
    Réponses: 2
    Dernier message: 18/04/2014, 09h52
  3. Réponses: 3
    Dernier message: 23/12/2010, 02h08
  4. récupérer une variable d'une fonction dans une classe
    Par free_dom dans le forum Général Python
    Réponses: 20
    Dernier message: 08/07/2009, 12h35
  5. Réponses: 3
    Dernier message: 29/04/2006, 13h02

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