begin process at 2012 05 29 02:12:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

OpenGL

 > 

C++ OpenGL => Comment fait-on un pointeur sur méthode ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

C++ OpenGL => Comment fait-on un pointeur sur méthode ?

mercredi 28 décembre 2005 à 19:11:05 | C++ OpenGL => Comment fait-on un pointeur sur méthode ?

Phenix_ent

Bonjour,

Voilà, je développe un module graphique pour un jeu. L'OpenGL a besoin d'un pointeur sur fonction pour le display, mais ma fonction est dans une class et j'arrive pas a faire fonctionner ca :(

void CGomokuDisplay::InitBoard(int ac, char **av, int PosX, int PosY, int Height, int Width)
{
    glutInit(&ac, av);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(Height, Width);
    glutInitWindowPosition(PosX, PosY);
    glutCreateWindow(av[0]);

    glutDisplayFunc(_Display);
}

void CGomokuDisplay::_Display()
{
 /*Le code pour le display*/
}


La class :
class CGomokuDisplay
{
private:
    void _Display(); // Fonction d'affichage principale
public:
    CGomokuDisplay();
    ~CGomokuDisplay();

    void InitBoard(int ac, char **av, int PosX, int PosY, int Height, int Width); // Initialise la fenetre openGL
};

Dans une class, une méthode public peut acceder à une méthode privée, mais pour faire un pointeur dessus ....

Merci de vos réponses
mercredi 28 décembre 2005 à 21:16:45 | Re : C++ OpenGL => Comment fait-on un pointeur sur méthode ?

luhtor

Réponse acceptée !
Normal que ca ne marche pas, c'est impossible de pointer sur la fonction membre qui n'est pas static.
mercredi 28 décembre 2005 à 21:56:34 | Re : C++ OpenGL => Comment fait-on un pointeur sur méthode ?

Phenix_ent

Ok, merci bien, maintenant ca fonctionne.
J'ai rendu la méthode display static et ca fonctionne.

class CGomokuDisplay
{
private:
    static void _Display(); // Fonction d'affichage principale
public:
    CGomokuDisplay();
    ~CGomokuDisplay();

    void InitBoard(int ac, char **av, int PosX, int PosY, int Height, int Width); // Initialise la fenetre openGL
};

Une dernière question, je vois pas trop ce que ca change de rendre la méthode static (à part que ca fonctionne), vu qu'elle retour void ...
Peux-tu m'aider la dessus ?

jeudi 29 décembre 2005 à 00:16:08 | Re : C++ OpenGL => Comment fait-on un pointeur sur méthode ?

luhtor

Bonne question, doit y avoir un problème d'adresse avec une fonction membre normal. Mais je peux pas t'en dire plus.

jeudi 29 décembre 2005 à 00:22:17 | Re : C++ OpenGL => Comment fait-on un pointeur sur méthode ?

Phenix_ent

Ok merci ;)
jeudi 29 décembre 2005 à 10:12:32 | Re : C++ OpenGL => Comment fait-on un pointeur sur méthode ?

nightlord666

Membre Club
Il faut la rendre statique, comme ça, OpenGL ne doit pas créer d'Instance de la classe pour y accèder(comme toi tu peut y accèder sans créer d'instance). Mais dans une méthode statique, tu ne peut pas utiliser les autres membres de la classe si ils ne sont pas statiques.
jeudi 29 décembre 2005 à 10:20:17 | Re : C++ OpenGL => Comment fait-on un pointeur sur méthode ?

Phenix_ent

Donc si je veux appeler une autre méthode de ma class dans "display", je devrais également la rendre static ?
Mais ce que je comprends pas bien, c'est ce que ca change de rendre une méthode static ou non, surtout quand elle renvoie void (mais bon, je pige pas non plus si c'était un int)
jeudi 29 décembre 2005 à 10:51:37 | Re : C++ OpenGL => Comment fait-on un pointeur sur méthode ?

nightlord666

Membre Club
Réponse acceptée !
Une methode normale de ta classe ne peut pas être appellée sans instance. Tu dois faire :

MaClasse myclass = new MaClasse();
myclass->methodeNormale();

Avec une methode statique, tu peut faire comme ça :

MaClasse::methodeStatique();

Et tu n'a pas besoin d'allouer de mémoire.

Autre exemple(car tu parle des types de retour) :

class MaClasse
{
public:
   static int add(int a, int b);
   static void afficher(char* chaine);
   int sous(int a, int b);
};

int MaClasse::add(int a, int b)
{
   return a + b;
}

void MaClasse::afficher(char* chaine)
{
   printf(chaine);
}

int MaClasse::sous(int a, int b)
{
   return a - b;
}

int main(int argc, char **argv)
{
   //Methodes statiques : pas d'allocation
   int n = MaClasse::add(1, 2);
   MaClasse::afficher(n); //Affichera 3

   //Methodes normales dans la classe : allocation
   MaClasse my = new MaClasse();
   int n2 = my->sous(2, 1);

   //Encore une methode statique
   MaClasse::afficher(n2); //Affichera 1

   return 0;
}

Pour en revenir à la question, OpenGL acceptera uniquement des méthodes statiques car il ne peut pas créer d'instance de ta classe et lui allouer de la mémoire. Il faut donc lui donner comme methode une methode statique.

J'espère que tu as compris, car c'est quand même les bases de la POO en C++ !
jeudi 29 décembre 2005 à 12:00:22 | Re : C++ OpenGL => Comment fait-on un pointeur sur méthode ?

Phenix_ent

Ok, oui c'est bon, j'ai compris (enfin je pense).
Donc, une methode static peut etre considérée comme une fonction hors d'un objet (en terme d'appel), sauf si elle est privée.
Ce qui me manquait pour comprendre, c'est que j'avais pas pensé à allocation de la mémoire pour l'objet (ce qui effectivement pour opengl ne peut pas marcher).

Merci beaucoup pour les explications.
jeudi 29 décembre 2005 à 12:21:00 | Re : C++ OpenGL => Comment fait-on un pointeur sur méthode ?

vecchio56

Administrateur CodeS-SourceS
C'est pas un problème d'adresse pour les fonctions membres normales, mais un problème de convention d'appel

1 2

Cette discussion est classée dans : int, opengl, display, pointeur, cgomokudisplay


Répondre à ce message

Sujets en rapport avec ce message

je comprend plus rien(pointeur) [ par bidules ] Bonjour,Pour moi on utilise les pointeur pour creer des tableau dynamiquement.or j'ai reussi a en declarer un avec une taille entrer a l'aide d'une va Ouverture de plss canaux d'affichages avec Xwindow (urgent) [ par mamy ] bonjour,Je réalise un programme en langage C qui utilise principalement l'outil xwindow. Mon problème est que je n'arrive pas à ouvrir 2 canaux d'affi Encapsulation c'est quoi? [ par Arkko ] Bonjour, J'ai lu sur un site internet qu'on peut faire un moteur 3d avec DirectX et OpenGl avec l'encapsulation. Mais qu'est-ce que l'encapsulation? S POINTEUR aye aye aye [ par djkill55 ] quelqun peut m expliquer pk ce programe ne marche pa svp...???le but c de remplir une matrice [3][3]a l aide des pointeur, la fct initializ est celle Pointeur vers une fonction dans une classe ... [ par MoDDiB ] Supposons que j'ai la fonctionvoid Fonction(int test,int t);appartenant a la classe Cclass.Quelle est la syntaxe pour creer un pointeur vers cette fon Mélanger OpenGL et Glut [ par tintin72 ] SalutJ'aimerai me servir des fonctions d'entrée clavier/souris proposées par Glut, mais j'ai vu que Glut s'initialise avec une fonction main façon C.i opengl.glut : gestion clavier [ par _Jonathan ] salut a tousvoila, j'arrive pas a utiliser la fonction glutSpecialUpFunc (chui sous devc++).glutSpecialFunc marche.Si kelkun pourrai m'expliker : ---- pointeur de fonction [ par Larwin ] salut tout le mondebon j'suis un gros débutant c/c++ et je fais mes premiers pas depuis 2, 3 jours...j'ai deja un petit probleme :)je m'explique :j'ai Pointeur récalcitrant [ par asmanur ] Bonjour, j'ai des prob avec des pointeurs regardez le codevoid LoadMap(int** Data,char* path){FILE* f=fopen(path,"r+");int Width=getc(f)-50;//Pourquoi comment affecter un tableau à un pointeur d'une classe? [ par cesdejong ] Bonjour,je débute un peu en C++ et je suis confronté à un problème pour lequel je ne trouve pas de solution élégante :class truc{...int* abscisse;int*


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales