jashnlt
Messages postés10Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention 1 juillet 2008
-
30 juin 2008 à 10:35
jashnlt
Messages postés10Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention 1 juillet 2008
-
1 juil. 2008 à 12:54
Bonjour à tous,
j'ai un gros problème que j'essai de résoudre depuis trop de temps maintenant : je suis en train de développer un jeux (original ), et le moment fut venus de créer un classe pouvant faire le lien entre mes differents objet. Comme une instance de cette classe doit être unique et globale, j'ai cherché sur google "objet globale c++". Je suis alors tombé sus un site qui explicite la méthode du singleton qui me paraissai convenable. J'ai créé ma classe, pas d'erreur de compilation mais après ... trou noir. Quand j'essai de déclaré un objet comme dans cet example, tout va bien mais quand je veut l'utiliser dans un objet alors : 'scene01' was not declared in this scope !!!!! J'croyai qu'il était global.
Tout ça pour dire que je galère, si quelqun peut m'expliquer simplement comment faire (et sans templates car je ne connais pas encore cette méthode ) ce serai simpas.
cs_Lucky92
Messages postés180Date d'inscriptionmercredi 22 décembre 2004StatutMembreDernière intervention16 août 20122 1 juil. 2008 à 07:53
Jashnlt,
j'ai le sentiment qu'il y a deux ou trois choses qui t'ont échappé :
1 - s'il y a une classe qui n'est pas complète ici, C'EST LA TIENNE et ce malgré le paraphrasage d'internet. Il manque la principale méthode du pattern singleton qui est la méthode de classe Instance() qui permet de construire au besoin et de délivrer l'instance, et il manque également les constructeur/destructeur privés.
2 - lorsque tu auras correctement implémenté TOUT le pattern, tu NE DOIS PAS"faire que le pointeur de l'objet scene01 soit global", tu DOIS simplement utiliser partout dans le code la méthode de classe Instance() pour appeller ton objet. Mais, sais-tu seulement ce qu'est une méthode de classe ?
3 - EVIDEMMENT, il ne faut pas copier la déclaration des classes partout dans le code : il faut mettre la déclaration dans un header et utiliser l'inclusion du header dans les fichiers cpp qui dans lesquels l'objet est utilisé.
PS : une méthode de classe est une méthode qui n'est pas associer aux objets d'une classe, mais à la classe elle-même. Les méthodes de classe sont déclarées statiques et s'utilisent principalement avec l'opérateur de résolution de portée ::, exemple :
BunoCS
Messages postés15371Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention 2 juin 2023102 30 juin 2008 à 10:56
Salut,
As-tu bien inclus le fichier contenant la définition de ton singleton?
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 30 juin 2008 à 10:58
Salut,
Singleton est un design pattern tout simple. Le bute et de permettre a une application de maintenir qu'une seule instance de classe et donc de la rendre accessible à la totalité du code.
Pour cela il te faut déclarer une variable static dans ta classe qui correspondra à l'instance unique à associer du meme type que ta classe.
Ensuite ton le main de ton progamme tu instancies un objet du meme type que ta classe singleton et le tour est joué.
Sinon je trouve que dans ton exemple, il complique un peu les choses.
Bon courage, et n'hésites pas à nous montrer ton bout de code si besoin.
jashnlt
Messages postés10Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention 1 juillet 2008 30 juin 2008 à 16:56
Bon, j'ai réussis à faire fonctionner mon singleton dans ma classe objet mais après pour faire que le pointeur de l'objet scene01 soit global, je bloque.
cs_Lucky92
Messages postés180Date d'inscriptionmercredi 22 décembre 2004StatutMembreDernière intervention16 août 20122 30 juin 2008 à 18:41
Le but du singleton n'est pas de fournir un "pointeur global" ; au contraire, le but est de faire en sorte que le pointeur de l'unique instance de ta classe soit gérée par la classe elle-même.
exemple d'implémentation :
class singleton
{
private:
singleton(){}
virtual ~singleton(){}
jashnlt
Messages postés10Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention 1 juillet 2008 30 juin 2008 à 19:07
Lucky92, merci beaucoup de m'avoir répondu mais tu ne fais que paraphraser tout ce qu'il y a sur le Web et y compris ici.
Si tu avais bien lu ce que j'ai écrit en dernier, tu aurais su que j'avais compris que le but du singleton n'était pas de fournir un pointeur globale.
Maintenant, tout ce que tu me donne comme réponse est un code d'implémentation incomplet, dans le sens où, si je fais exactement ce que tu me dis, il risque d'y avoir des problème (recopier la classe dans chaque fichier ).
jashnlt
Messages postés10Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention 1 juillet 2008 1 juil. 2008 à 12:54
J'ai accepter ta reponse pour le point n°3, j'ai trouvé hier que le problème était tout simplement là.
Je te remerci beaucoup pour tes réponses malgré le fait que "tu prend la mouche assé rapidement" : faut rester cool !