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

Booster
|
Bonjour, Voilà, j'ai une incompréhension au niveau d'une variable static. Voici mon code : maclasse.hclass maclasse; //Ca me sert juste à ce que ma variable static trouve ma classestatic 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
|
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
|
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è
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante 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
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
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
|