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

Langage C++ Discussion :

Template Singleton problem


Sujet :

Langage C++

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Par défaut Template Singleton problem
    Bonjours,
    J'ai crée un template Singleton et une classe qui en hérite.
    J'ai un problème lors de l'édition de lien : "unresolved external symbol",
    qui provient de la classe dans laquelle j'accède à l'instance du singleton.
    La classe template :
    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
     
    #ifndef _DEV_SINGLETON_H_
    #define _DEV_SINGLETON_H_
     
    #include "DebugNew.h"
     
    template <typename T> class DevSingleton
    {
    public:
    	// Get Instance
    	static T * Instance()
    	{
    		if (_singleton == NULL)
    		{
    			_singleton = new T;
    		}
    		return (_singleton);
    	}
    	// Destroy Instance
    	static void Destroy()
    	{
    		if (NULL != _singleton)
    		{
    			delete _singleton;
    			_singleton = NULL;
    		}
    	}
    protected:
    	/* Constructor */
    	DevSingleton() {}
    	/* Destructor */
    	~DevSingleton() {}
    private:
    	// Unique instance
    	static T * _singleton;
    };
     
    template <typename T> T * DevSingleton<T>::_singleton = NULL;
     
    #endif _DEV_SINGLETON_H_
    La classe fille :
    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
     
    #ifndef _DEV_INTERNAL_OBJ_
    #define _DEV_INTERNAL_OBJ_
     
    #include <d3dx9.h>
     
    #include "d3dfont.h"
    #include "DevSingleton.h"
     
    class DevInternalObj : public DevSingleton<DevInternalObj>
    {
    friend class DevSingleton<DevInternalObj>;
     
    public:
    	//	INTERNAL OBJECTS
    	IDirect3D9 * pd3d9;
    	IDirect3DDevice9 * pDevice;
    	CD3DFont * Font;
    private:
    	//	INERNAL MATRICES
    private:
    	DevInternalObj();
    	~DevInternalObj();
    public:
    	//	GET and SET Internal Objects
    	// GET Matrices
    	// SET Matrices
    };
     
    #endif
    Le constructeur de la classe dans laquelle j'utilise le singleton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DevRenderer::DevRenderer()
    {
     
    	DevInternalObj::Instance()->Font = new CD3DFont("Comic sans MS", 12, 0);
    }
    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 457
    Par défaut
    "unresolved external symbol",
    Quel symbol

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Par défaut
    Plus precisement :

    error LNK2019: unresolved external symbol "public: __thiscall CD3DFont::CD3DFont(char const *,unsigned long,unsigned long)" (??0CD3DFont@@QAE@PBDKK@Z) referenced in function "public: __thiscall DevRenderer:evRenderer(void)" (??0DevRenderer@@QAE@XZ)
    MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 70
    Par défaut
    Il faut que tu link avec la lib qui contient CD3DFont (ne me demande pas laquelle c'est...)

    En passant, ton singleton n'est pas thread safe dans son init.

Discussions similaires

  1. [probleme] template singleton et .lib static
    Par typedef dans le forum Bibliothèques
    Réponses: 12
    Dernier message: 09/02/2010, 16h21
  2. Template, Singleton et Héritage
    Par al2000 dans le forum C#
    Réponses: 3
    Dernier message: 19/04/2009, 20h21
  3. template C++ : probleme
    Par italiasky dans le forum Langage
    Réponses: 10
    Dernier message: 18/10/2007, 19h24
  4. Réponses: 3
    Dernier message: 22/11/2006, 21h10
  5. Réponses: 13
    Dernier message: 25/10/2006, 16h17

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