begin process at 2012 05 28 19:46:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Déclaration d'une class


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

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

Membre Club
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

1 2

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é


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 : 1,685 sec (4)

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