begin process at 2012 05 30 05:30:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Probléme variable static et classe incompréhension


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

Probléme variable static et classe incompréhension

mardi 15 janvier 2008 à 10:23:29 | Probléme variable static et classe incompréhension

Booster

Membre Club
Bonjour,

Voilà, j'ai une incompréhension au niveau d'une variable static. Voici mon code :

maclasse.h

class maclasse; //Ca me sert juste à ce que ma variable static trouve ma classe
static maclasse C;

class maclasse{
    public:
           maclasse(); //Constructeur
           ~maclasse(); //Destructeur
}

maclasse.cpp

maclasse:maclasse(){ //Constructeur
    C=this;
}

maclasse:~maclasse(){ //Destructeur
    C=NULL;
}

La question est : pouquoi lorsque je suis dans mon constructeur ou destructeur ma variable static vaux bien ce que je veux, et lorsque je sort de mon constructeur/destructeur la variable static reprend la valeur quelle avait avant d'entrer dans le constructeur/destructeur ?

Je ne vois pas pourquoi et je ne vois pas non plus comment faire pour que cela marche :D

Merci d'avance de vos réponses.
mardi 15 janvier 2008 à 12:05:19 | Re : Probléme variable static et classe incompréhension

mastoc

Juste une question : ta variable doit vraiment être statique ?

Une autre question : à quoi te sert cette variable ? Pourquoi mettre une instance de ta classe dans une variable statique ?
Cette variable va donc contenir un instance de ta classe. Mais lorsque tu appels ton constructeur tu as déjà créé une instance ?!
Bref, as tu plus d'explication sur ce que tu veux faire ?

sinon essaye toujours avec une variable membre non static.

Vive les Moutons !
mardi 15 janvier 2008 à 12:22:59 | Re : Probléme variable static et classe incompréhension

Booster

Membre Club

Salut,

Et merci pour ta réponse.

1) Oui elle doit être statique sinon j'ai des problèmes ^^

2) Cette variable me sert en quelque sorte à faire un singleton de ma classe (java) j'utilise cette variable dans ma classe pour savoir si cette dernière est instancié.

Donc je viens de faire d'autre tests car tu m'as donné des idées et je viens de m'apercevoir en réalité que ma variable est instanciée 2 fois en quelque sorte.

Donc la question c'est pourquoi ?

Pourquoi ma variable à l'intérieur de ma classe vaux quelque chose.

Et à l'extérieur de ma classe cette même variable vaux autre chose !



Merci d'avance ;)






mardi 15 janvier 2008 à 12:33:00 | Re : Probléme variable static et classe incompréhension

PetersonG

Tu utilises la passe jedi "class maclasse;" qui dit au compilo de te faire confiance sur la nature de cette classe là.


Dans ton constructeur, this est de type maclasse* alors que C est de type maclasse qui n'est pas un pointeur ! Je pense que ça compile juste parce que variable C de type non définit et devrait être non initialisée.

Je pense que pour d'obscures raisons la variable C dans ton constructeur est une variable locale qui n'a rien à voir avec ta variable statique (et peut-être de type int si tu ne travailles pas sous un MSVC assez récent).

Essaies déjà de déclarer ta variable C en type maclass* et de l'initialiser dans le cpp, tu devrais mieux voir ce qui se passe ^^

Sinon, pour faire un singleton, ta variable doit être une statique de ta classe maclasse, et ton constructeur doit être private.

class maclasse{
    private:
       maclasse(); //Constructeur
      
static maclasse*   m_instance;
    public:
        static maclasse*   getInstance()
        {
             if(!m_instance)
                 m_instance = new maclasse();
             return m_instance;
         }
}

maclasse::m_instance=NULL;

Peterson
mardi 15 janvier 2008 à 12:33:46 | Re : Probléme variable static et classe incompréhension

mastoc

J'ai déjà eu le même problème il me semble mais je ne me souviens plus exactement de la raison...

Pour les singletons j'ai trouvé ça ca peut t'intéresser :
http://tfc.duke.free.fr/coding/singleton.html

Vive les Moutons !
mardi 15 janvier 2008 à 12:36:33 | Re : Probléme variable static et classe incompréhension

mastoc

Ben en fait j'avais pas lu le post de Peterson. Je suis d'accord avec lui. Passe ta variable static en pointeur et c'est bon. sinon utilise la méthode que je t'ai envoyé elle devrait marcher ;)

Vive les Moutons !
mardi 15 janvier 2008 à 12:38:22 | Re : Probléme variable static et classe incompréhension

Booster

Membre Club
Salut,

Escuse erreur de ma part c'est bien un pointeur (je rectifie)

static maclasse * C;

class maclasse{
    public:
           maclasse(); //Constructeur
           ~maclasse(); //Destructeur
}

maclasse.cpp

maclasse:maclasse(){ //Constructeur
    C=this;
}

maclasse:~maclasse(){ //Destructeur
    C=NULL;
}

J'ai bien mi ça !

Merci

mardi 15 janvier 2008 à 13:22:13 | Re : Probléme variable static et classe incompréhension

PetersonG

Ben ton pointeur static n'est pas initialisé, ce qui explique que ça compile : ce n'est qu'un pointeur, donc une adresse non initialisée sans espace mémoire associé. Tu pourrais lui dire :

class Banane; //Ca me sert juste à ce que ma variable static trouve ma classe
static Banane* C;

que ça aurait le même effet.

De plus, je ne vois pas de raison que cette variabe C soit accessible dans ta classe, donc ton constructeur doit en redéclarer une. Il me semble que certains compilateurs acceptent la déclaration de variables sans indication de type (du coup, ça doit être un int), mais ce n'est pas le cas de tous et il y a de fortes chances que ça te balance au moins un warning.
Ta variable pourrait peut-être être accédée par ton constructeur si elle était en global (? j'avoue que j'ai un doute vu que je n'utilise les global qu'un fois tous les 5 ans.) mais ça serait vraiment SALE !!

Enfin, le but du design Singleton, c'est quand même que tu n'ais qu'une instance de ta classe dans tout le programme. Pour ça, il faut que tu interdises l'accès au constructeur par l'utilisateur de la classe, ce qui est accomplit en déclarant le constructeur en private.
En bref, tu ferais mieux de suivre le Pattern ^^
(wikipedia peut être ton ami, pour ça)

++
Peterson
mardi 15 janvier 2008 à 13:24:30 | Re : Probléme variable static et classe incompréhension

PetersonG

Oups erreur :
*.ce qui est accomplit en déclarant le constructeur en private ou en protected.

parce que sinon, si tu dérives ta classe, ça pourrait etre problématique.


Cette discussion est classée dans : variable, static, constructeur, maclasse, destructeur


Répondre à ce message

Sujets en rapport avec ce message

variable membre non static dans une fonction membre static [ par adrod ] J'ai une erreur du compilateur: Error C2597. Je suis allé sur msdn pour avoir plus de précision et ils me disent:To access the nonstatic member, you m (bool) probléme avec une variable bool [ par Xilofeon ] Salut a tousquestion d'un débutant confirmé lol !!!alors voila j'ai une variable bool a utilisé dans plusieur fonction dont 1 void dans le fichier .cp Au Secour !!!! (avec static) [ par Slan ] SalutJ'ai un petit probleme. Je voudrai recuperer le contenu d'unevariable déclarée en 'static' a partir d'une fonction contenudans un autre fichier q import/export static member variable [ par bvoisin ] Bonjour,c'est sans doute très simple, mais j'écris une DLL qui exporte une classe.  J'ai une variable static (pour connaître le nombre d'objets instan Constructeur/destructeur [ par Ben0007 ] Hello,En en-tête d'un fichier .cpp je trouve #include blablabla, puis:/******************************************* Constructeur et Destructeur******** CALLBACK dans une Classe => problême mot clef static ! [ par Capa6T ] Salut, Une petite question à 2 euros...je cherche depuis un moment et je ne trouve pas la solution. j'ai une classe bidon:// Bidon.hclass Bidon{public variable private et static dans une classe [ par simtiers ] Salut ! Voilà, j'aimerais savoir comment fait-on pour utiliser une variable statique dans une classe, et que cette variable soit dans le bloc private variable privee et statique [ par Kangourou_Nomade ] Bonjour,Je voudrais utiliser une variable statique dans une classe ( un logger). cette variable est un mutex qui me permettraitde ne pas ecrire dans m Constructeur de copie et destructeur [ par tom24 ] Bonjour à tous! Voila je debute en programmation (je suis en premiere année de DUT informatique), j'ai commencé la programmaton avec java et je conti Surdéfinition statique (static) d'une variable membre [ par PetersonG ] Bonjour,Une drôle d'idée m'a fait surdéfinir en static une variable membre d'une classe parente, et, à ma grande surprise, le code compile sans problè


Nos sponsors


Sondage...

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,686 sec (4)

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