Accueil > Forum > > > > Déclaration d'une class
Déclaration d'une class
lundi 12 décembre 2005 à 22:59:58 |
Déclaration d'une class

Turok
|
Salut, Je débute en C++, et dans mon prog j'ai créer une class. Le prob, c'est que quand une instance de cette class (Class_object objet("<nomdefichier>"), pour pouvoir m'en servir dans les autres fonctions, je suis obligés de le passer en argument de chaque fonction, ce qui est génant s'il y beaucoup de class et de fonctions. J'aimerai savoir comment la rendre globale par tout le programme pour ne pas avoir à la passer comme argument à chaque fois, car quand je créé l'instance en dehors d'une fonction ca plante. Merci Turok
|
|
lundi 12 décembre 2005 à 23:53:34 |
Re : Déclaration d'une class

luhtor
|
"car quand je créé l'instance en dehors d'une fonction ca plante." => et ben c'est pas normal. "J'aimerai savoir comment la rendre globale" => c'est exactement ca, il te suffit de déclarer l'instance en dehors de toute fonction, par exemple en haut du programme. Il faudrait quand déclarer la définition de ta classe. Ainsi le début de ton programme cera: #include... class Class_object; Class_object objet("nom_defichier"); class Class_object { ... }; ... tes foncions int main(...) { ... }
Mais faut éviter d'abuser des variables globales.
|
|
mardi 13 décembre 2005 à 02:25:48 |
Re : Déclaration d'une class

vdust
|
Je suis d'accord avec luhtor, sauf pour la création de l'objet : J'aurais plus tendance à utiliser un pointeurs global : Class_object* pobject = (Class_object*) 0; et dans le main : int main(...) { pobject = new Class_object("nom_defichier"); ... //Ne pas oublier de détruire l'objet lorsqu'on n'en a plus besoin delete pobject; pobject = (Class_object*) 0; ... } Ainsi, tes fonctions externes manipulent le pointeur (le point '.' pour accéder aux membres est alors remplacé par "->"). Mais l'utilisation de pointeurs demandent une grande rigueur vis-à-vis de l'initialisation et de la destruction des objets pointés (notamment, des tests de nullité du pointeur partout où il doit être utilisé sont les bienvenue) ; a fortiori lorsqu'il s'agit d'un pointeur global. Maintenant, une autre petite remarque/question : que font tes fonctions exactements ? Si elles se contentent de manipuler uniquement des membres de ta classe, dans ce cas, il est plus judicieux de déclarer ces fonctions comme membres de ladite classe. Dans ce cas, il n'y a plus besoin de passer une instance en argument, et l'instance n'a plus besoin d'être globale. -- Virtual Dust --
|
|
mardi 13 décembre 2005 à 06:48:42 |
Re : Déclaration d'une class

neodelphi
|
Tu peux aussi regarder du coté du "Singleton Design Pattern", au cas où ce serait plus approprié à ton problème...
neodelphi
|
|
mardi 13 décembre 2005 à 14:25:51 |
Re : Déclaration d'une class

Turok
|
Pour l'utilisation des pointeurs, je ne préfère pas car je ne les maitrise pas encore. Pour le "Singleton Design Pattern", j'ignore ce que c'est. Sinon lorsque j'essaye de mettre l'instance en dehoers de la fonction, je peux compiler, mais au démarrage du prog il y a tout de suite une erreur windows. Voici la structure du prog: //Dans le fichier entête: "main.h" class Class_Object { private: float frame; //frame du sprite animé int pos_X; //position en X du sprite int pos_Y; //position en Y du sprite SDL_Surface *surface; //surface de l'objet SDL_Rect rectDest; //rectangle de destination de l'objet SDL_Rect rectScr; //rectangle de la position de l'objet //... public: Class_Object(char* filename); void Draw(SDL_Surface *sdlMainScreen); void Move(int X,int Y) {pos_X+=X; pos_Y+=Y;} //... ensuite il y a la fonction main dans le fichier "Main.cpp" la fonction main appelle la fonction "New_Game" qui se situe dans le fichier "Jeu.cpp" et dont voici le code : #include "main.h" class Class_Object; Class_Object player("al"); void New_Game(SDL_Surface *sdlMainScreen, int level ) { player.Set_pos(0,0); Run(sdlMainScreen); } ...
|
|
mardi 13 décembre 2005 à 18:19:31 |
Re : Déclaration d'une class

vdust
|
Pourrais-tu indiquer l'erreur exacte que tu obtiens. Sans elle, il est impossible de t'aider. -- Virtual Dust --
|
|
mardi 13 décembre 2005 à 18:50:34 |
Re : Déclaration d'une class

Turok
|
Justement, il n'y a pas d'erreur à la compilation. Mais quand je lance le prog, windows me sort la fenetre de plantage, celle où il y a écrit : "SDL project à rencontré un problème et doit fermer... ... Déboquer/Envoyer le rapport d'erreur/Ne pas envoyer" Turok
|
|
mardi 13 décembre 2005 à 19:02:44 |
Re : Déclaration d'une class

Turok
|
A si, si je le passe en mode débug il me sort : Unhandled exception in SDL Project.exe(SDL.DLL):0xC0000005 : access violation. et la une flêche pointe à la ligne "10027305 mov ecx,dword ptr [eax+138h]" de la fenetre disassembly. Turok
|
|
mardi 13 décembre 2005 à 19:05:00 |
Re : Déclaration d'une class

Turok
|
Après test, il s'avère que ça ne plante plus si j'enlève le constructeur. Mais pourquoi? nota: j'ai oublié de monter ce fichier tout à l'heure //Objet.cpp #include "main.h" Class_Object::Class_Object(char *filename) { SDL_Surface *temp; temp = SDL_LoadBMP(filename); surface=SDL_DisplayFormat(temp); SDL_FreeSurface(temp); } void Class_Object::Draw(SDL_Surface *sdlMainScreen) { rectDest.x=pos_X; rectDest.y=pos_Y; SDL_BlitSurface(surface, NULL, sdlMainScreen, &rectDest); }
Turok
|
|
mardi 13 décembre 2005 à 19:18:31 |
Re : Déclaration d'une class

Turok
|
En supprimant le constructeur, et en le remplaçant par une méthode pour charger les images ça marche. Je ne comprend pas pourquoi ça plante si j'incluait le chargement de l'image dans la méthode.
Turok
|
|
Cette discussion est classée dans : class, instance, passer, fonctions, déclaration
Répondre à ce message
Sujets en rapport avec ce message
Déclaration de fonctions en C++ Builder [ par rene77 ]
Lorsque je déclare mes fonctions dans le fichier source .h et que je les définient dans mon .cpp, à la compilation il y a une erreur. Où et comment fa
Déclaration et définition des fonctions [ par AngeloVivaldi ]
Slt tout le monde ! Voila, lorsque l'on ecrit "#include " Ou sont définie et déclarer les fontions relatives à ce fichier d'en tête ?
Exec >>> Librairie [ par Stormy ]
La question est large et suscitera de nombreuses réponses, je pense. Voici le problème. J'ai coder un exécutable pour une application graphique (openg
connaître l'instance de class [ par jerame ]
Bonjour à tous, J'ai plusieurs class qui héritent les unes des autres, je souhaiterais connaître l'instance de ma class, pour savoir si je suis au bo
Fonctions & Thread .... [ par DeAtHCrAsH ]
Lu all,Je dispose d'une class qui possède un thread.J'aimerai que lorsque j'appelle les fonctions membres de la class, celle ci s'execute dans le thre
Pointeurs sur fonction entre class [ par zeGouky ]
Bonjour,voilà j'ai un petit soucis avec les pointeurs de fonctions, je m'explique j'ai une class A et une class B tel que :class A { int mafuncti
Automate Singleton pb de linkage [ par 9sber ]
J'essai de construire un petit prog qui mets en oeuvre un automate de singleton comme suit.Mais à la compilation j'ai des pbs de Linkage.J'ai une clas
Problème de déclaration de fonction de picking [ par nisaloncaje ]
Bonjour, dans mon programme je voulais faire du picking mais j'ia le problème suivant : je comptais mettre toutes les fonctions de picking dasn un fic
Passer une instance de classe dans une mémoire partagée ?? [ par vinvay ]
Comment puis-je passer une instance de classe dans une shared memory, sachant que cette classe contient une structure. J'arrive, dans le deuxième prog
Problème avec les fonctions virtuelles [ par nisaloncaje ]
Salut, j'utilise dans mon programme un vector qui contient plusieurs types d'objets issus d'une meme classe (class_mere) qui est abstraite. Pour la dé
Livres en rapport
|
Derniers Blogs
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 SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
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
|