Accueil > Forum > > > > C++ OpenGL => Comment fait-on un pointeur sur méthode ?
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 ?
|
jeudi 29 décembre 2005 à 10:12:32 |
Re : C++ OpenGL => Comment fait-on un pointeur sur méthode ?

nightlord666
|
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
|
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
|
C'est pas un problème d'adresse pour les fonctions membres normales, mais un problème de convention d'appel
|
|
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*
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|