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

GLUT Discussion :

Glut / Class / Pointeur sur fonction


Sujet :

GLUT

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Glut / Class / Pointeur sur fonction
    Bonjour,

    En ce moment je fait un petit prog OpenGL qui utilise Glut. J'ai décidé de faire une class pour la gestion de ma fenetre. Le .h donne ca:

    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
     
    #ifndef _CWINDOWS_
    #define _CWINDOWS_
     
    #include "CAxis.h"
     
    class CWindows
    {
      private:
        bool form_fullscreen;
        bool form_info;
        CAxis Axis;
     
        void (*pDisplay)(void);
      public:
        CWindows();
        ~CWindows(void);
     
        void Init(int,char**);
        void Display(void);
        void Key(unsigned char,int,int);
    };
     
    #endif
    Mon .c
    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
     
    [...]
    CWindows::CWindows()
    {
      form_fullscreen = false;
      form_info = false;
     
    }
     
    void CWindows::Init(int argc,char** argv)
    {
      glutInit(&argc,argv);
     
      glutInitWindowSize(resx,resy);
     
      glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE);
      glutCreateWindow("Appli");
      glutPositionWindow(0,0);
      glutInitWindowSize(300,300);
      glutDisplayFunc(this->Display());
      glutKeyboardFunc(this->Key);
    }
    [...]
    Jusque la pas de souci mais voila mon compilateur (dev-c++) me retourne les érreurs suivante:
    In member function `void CWindows::Init(int, char**)':
    invalid use of void expression
    argument of type `void (CWindows::)(unsigned char, int, int)' does not match `void (*)(unsigned char, int, int)'
    [Build Error] [CWindows.o] Error 1

    Tout en sachant que l'erreur 'invalid use of void expression' est pour la ligne de code 'glutDisplayFunc(this->Display());'. Et que l'erreur 'argument of type `void (CWindows::)(unsigned char, int, int)' does not match `void (*)(unsigned char, int, int)'' est pour la ligne 'glutKeyboardFunc(this->Key);'.

    J'ai éssayer aussi avec un pointeur sur fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pDisplay = this->Display();
    Mais le compilateur me retourne l'érreur suivante: 'void value not ignored as it ought to be'.

    Quelqu'un peut t'il m'aider ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    c'est pas :

    glutDisplayFunc(this->Display());

    mais

    glutDisplayFunc(this->Display);

    sans les () car le parametre de glutDisplay est un pointeur sur fonction et non le résultat du parametre(qui est le résultat de ta fonction soit void ici, erg!). Et tu peut enlever les this-> aussi si tu veut ils sont pas utiles ici vu kil n'y a pas de conflit avec tes fonctions membres.

  3. #3
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Pourquoi ne peut-on pas passer une fonction membre là où on attend un pointeur de fonction ?

    et bien c'est dans la faq c++

    ici

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok merci pour vos réponse, je suis arrivé à corrigé mon problème.

  5. #5
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 530
    Points : 5 206
    Points
    5 206
    Par défaut
    Salut,

    tu pourrais détailler ce que tu as fais pour résoudre ton problème ?
    cela pourrai aider ceux qui voudraient encapsuler Glut dans une classe

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    tu pourrais détailler ce que tu as fais pour résoudre ton problème ?
    Ouep. En fait j'ai sorti de la classe les fonctions qui sont propre à glut. Comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class CWindows
    {
      [...]
    };
     
    void WInit(int,char**);
    void WDisplay(void);
    void WKey(unsigned char,int,int);
    Ensuite dans le cpp de la classe j'ai écrit mes fonctions WInit(), WDisplay(), Wkey(). Et je défini un objet CWindows en globale. Dans les fonction WInit(), WDisplay(), Wkey() je peux ainsi utiliser mon objet. Et enfin dans le main tu met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main(int argc,char** argv)
    {
      extern CWindows* win;
      win = new CWindows();
      WInit(argc,argv);
      delete win;
      return 0;
    }
    Pour info:
    extern CWindows* win;
    Pour dire que win est un objet de type CWindows* et le extern pour dire qu'il est définie ailleur dans le code (dans mon CWindows.cpp)


    Voila,

Discussions similaires

  1. mélange de pointeurs sur fonctions et classes
    Par membreComplexe12 dans le forum C++
    Réponses: 4
    Dernier message: 15/10/2012, 14h06
  2. Pointeur sur fonction de classe anonyme
    Par dewsz dans le forum C++
    Réponses: 5
    Dernier message: 15/07/2008, 11h00
  3. [Win32] Pointeur sur fonctions et méthodes de classe
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 13/09/2007, 19h07
  4. Réponses: 12
    Dernier message: 30/06/2006, 16h46
  5. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37

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