IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

[VC++6.0] Pb de déclaration d'une variable de type template singleton


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Par défaut [VC++6.0] Pb de déclaration d'une variable de type template singleton
    Bonjour à toutes et à tous !

    J'ai récupéré le code source d'une application que je dois optimiser. Il y a quelques variables globales dans cette application et je souhaite mettre à profit le Design Pattern Singleton.

    J'ai récupéré un code source définissant une classe template singleton (.h suivant) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    #ifndef _SINGLETON_H
    #define _SINGLETON_H
     
    template <class T>
    class CSingleton
    {
    	public:
    		// Renvoi l'instance unique de la classe
    		static CSingleton* Instance()
    		{
    			if( !pInst )
    				pInst = new T;
     
    			return pInst;
    		}
     
    		// Détruit l'instance unique de la classe
    		static void Destroy()
    		{
    			delete pInst;
    			pInst = NULL;
    		}
     
    	protected:
    		// Constructeur par défaut
    		CSingleton();
     
    		// Destructeur par défaut
    		~CSingleton();
     
    	private:
    		// Donnée membre
    		static T* pInst;
     
    		// Copie interdite
    		CSingleton(const CSingleton&);
    		void operator=(const CSingleton&);
    };
     
    // Déclaration de notre variable statique
    template <class T> T* CSingleton<T>::pInst = NULL;
     
    #endif
    Jusque la pas de problème , pas de problème de compilation.

    Etape suivante, je souhaite créer mes propres classes dérivant de cette classe template ... hop c'est parti en faisant comme ci après (j'ai juste utilisé un .h) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifndef _UN_SINGLETON_H
    #define _UN_SINGLETON_H
     
    class CUnSingleton : public CSingleton<CUnSingleton>
    {
    	friend class CSingleton<CUnSingleton>;
    };
     
    #endif
    Là encore je compile et aucune erreur

    Mon problème est le suivant : comment déclarer dans mon main une variable de type CUnSingleton ? Quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CSingleton<CUnSingleton>* S = CSingleton<CUnSingleton>::Instance();
    ça passe pas et j'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TEMPLATE_SINGLETON.obj : error LNK2001: unresolved external symbol "protected: __thiscall CSingleton<class CUnSingleton>::CSingleton<class CUnSingleton>(void)" (??0?$CSingleton@VCUnSingleton@@@@IAE@XZ)
    Est ce que quelqu'un a une idée à me proposer pour résoudre mon problème ?

    D'avance merci.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Par défaut
    Information supplémentaire, le code que j'ai repris est celui de Laurent GOMILA et tiré de ses articles sur le développement d'un moteur 3D ... rendons à César ce qui lui appartient.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Par défaut
    pour utilise ont object derive de CSingleton tu peur essaille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CUnSingleton& singleton = CUnSingleton::Instance();

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par philippe V
    pour utilise ont object derive de CSingleton tu peur essaille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CUnSingleton& singleton = CUnSingleton::Instance();
    plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CUnSingleton* psingleton = CUnSingleton::Instance();

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Par défaut
    J'ai essayé ta solution Farscape mais j'obtient l'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error C2440: 'initializing' : cannot convert from 'class CSingleton<class CUnSingleton> *' to 'class CUnSingleton *'

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    bon bizarre ,je viens d'essayer ton code (la premiere version)
    ça compil bien sous visual 6.0 et 2005
    la seule difference c'est que pour des raisons de facilité de test j'ai tout mis dans le même source:
    la definition du template, et l'appel à instance.
    tu peux faire un essai dans ce sens ?


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Déclaration d'une variable ArrayList
    Par nanath02 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/03/2007, 10h30
  2. Mauvaise déclaration d'une variable
    Par Molos dans le forum Langage
    Réponses: 3
    Dernier message: 21/01/2007, 10h36
  3. Réponses: 7
    Dernier message: 02/08/2006, 15h51
  4. Réponses: 8
    Dernier message: 13/07/2006, 10h04
  5. déclaration d'une variable
    Par ouldfella dans le forum Composants VCL
    Réponses: 8
    Dernier message: 20/10/2005, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo