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

Discussion :

Pointeur de fonctions

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2013
    Messages : 84
    Points : 94
    Points
    94
    Par défaut Pointeur de fonctions
    Bonjour à tous,

    Je me pose des question sur la faisabilité d'un tableau de pointeur de fonction et de leur appelle par la suite.

    J'ai par exemple le fichier.h suivant :

    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
    #ifndef LAUNCHER_H
    #define LAUNCHER_H
     
    #include <QObject>
     
    class Launcher : public QObject
    {
     
        Q_OBJECT
     
    public:
        Launcher(QObject *parent = 0);
        void load();
     
    private:
        typedef void (Launcher::*fptr)();
        typedef struct {
            fptr f;
            QString name;
        } function_t;
     
        void loadFunction1();
        void loadFunction2();
        void loadFunction3();
     
        std::vector<function_t> array = {
            function_t{Launcher::loadFunction1, "Load function 1"},
            function_t{Launcher::loadFunction2, "Load function 2"},
            function_t{Launcher::loadFunction3, "Load function 3"}
        };
     
    };
     
    #endif // LAUNCHER_H
    Quand je veux exécuter ma fonction, j'ai l'erreur suivante : must use '.*' or '->*' to call pointer-to-member function in 'func.Launcher::function_t::f (...)', e.g. '(... ->* func.Launcher::function_t::f) (...)'

    Code de l'appelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (function_t &func : array)
        {
            func.f();
        }
    Je ne comprend pas pourquoi cela n'est pas possible. J'ai du louper quelque chose.

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Tu ne peux pas appeler une fonction membre non statique ainsi sans le biais d'une instance.
    Ici vu le contexte, il s'agit sûrement de l'instance courante this :
    Remarque : le typedef devant struct est inutile en C++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        struct function_t {
            fptr f;
            QString name;
        };

+ Répondre à la discussion
Cette discussion est résolue.

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