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 :

Parametre d'entrée : une fonction!


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Par défaut Parametre d'entrée : une fonction!
    Je developpe un projet qui utilise la bibliothéque GLut (GL pour opengl).

    Dans cette bibliothéque une fonction a comme paramètre d'entré le nom d'une fonction, pus precisement la declaration de la fonction dans glut.h est de la sorte :
    GLUTAPI void APIENTRY glutDisplayFunc(void (GLUTCALLBACK *func)(void));
    Donc un pointeur sur une fonction.

    Dans un premier temps je n'ai pas eu de probleme, la fonction s'appellais affichage je mettait donc
    glutDisplayFunc(affichage);
    et ca marchais parfaitement!

    Par contre il y a d'autre fonction du même genre que affichage() il y a mouse() ...ect qui utilisent des variables en commun entre eux.
    Comme j'ai dis, en premier temps j'ai tout mis en vrac avec des variables globales et ca marchait parfaitement.

    Maintenant pour rendre le projet plus lisible j'ai mis toute ces fonctions qui utilisaient des variables en commun entre eux dans une classe avec la variable en private, je pense que c'est la bonne solution, mais la j'ai un probleme.

    glutDisplayFonction(affichage);
    ne fonctionne pas, affichage etant une fonction de la classe c'est normal.

    glutDisplayFonction(Aff::affichage); //Aff est ma classe
    ne fonctionne pas à mon grand etonnement et me donne comme message d'erreur :
    error C3867: 'Aff::affichage': function call missing argument list; use '&Aff::affichage' to create a pointer to member

    glutDisplayFonction(A.affichage); //A etant mon objet crée dans le main
    ne fonctionne pas non plus et me donne le même message d'erreur.

    Je ne vois pas quoi faire à l'aiiiiiiiide!!!
    Et merci d'avance

  2. #2
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Par défaut

    Oh super..
    /me offre un chocolat au modérateur

    J'ai cherché dans la fac mais j'arrivais pas à bien formuler ma recherche.

  4. #4
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Par défaut
    Bon j'ai encore besoin d'un peu d'aide.

    dans la reponse de la faq on me dit de crée une nouvelle fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static DWORD WINAPI StaticThreadFunc( void *Param ) 
    { 
            MaClasse* Obj = reinterpret_cast<MaClasse*>( Param ); 
            return Obj->ThreadFunc(); 
    }
    J'imagine que DWORD est un parametre de sortie.
    Mais aucune idée par rapport à WINAPI !!

    J'ai donc mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static void Staticaffichage( void *Param ) 
    { 
    	Aff* Obj = reinterpret_cast<Aff*>( Param ); 
    	return Obj->affichage(); 
    }
    mais le problème persiste.

    error C2664: 'glutDisplayFunc' : cannot convert parameter 1 from 'void (__cdecl *)(void *)' to 'void (__cdecl *)(void)'

    [Balises CODE rajoutées par Fiquet, merci d'y penser la prochaine fois]

  5. #5
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Attention le code de la FAQ n'est qu'un exemple avec l'API Windows. Glut ne demande pas une fonction avec un paramètre void*.

    En fait l'erreur de ton compilateur est assez explicite. Tu dois lui passer une fonction sans paramètre (void), et pas une function avec un pointeur de void comme paramètre.

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Par défaut
    Donc si je comprend bien...

    glutdisplay fonction veut comme parametre d'entrée quelque chose de la forme

    void (__cdecl *)(void)

    Je modifie donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static void Staticaffichage( void *Param ) 
    { 
    	Aff* Obj = reinterpret_cast<Aff*>( Param ); 
    	return Obj->affichage(); 
    }
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static void Staticaffichage( void ) 
    { 
    	Aff* Obj = reinterpret_cast<Aff*>( ); 
    	return Obj->affichage(); 
    }

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

Discussions similaires

  1. Passage de paramètres entre une fonction et une interface graphique
    Par ninja_3 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 29/05/2007, 11h37
  2. Passage de parametre facultatif a une fonction
    Par Rakken dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/04/2007, 13h06
  3. Conflit entre une fonction Delphi et une API ?
    Par [ZiP] dans le forum Delphi
    Réponses: 2
    Dernier message: 23/01/2007, 10h14
  4. [débutant] mettre un parametre optionnel dans une fonction
    Par maximenet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/08/2006, 16h08
  5. Réponses: 11
    Dernier message: 05/04/2006, 11h50

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