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 :

Heritage de Template Singleton : erreur fonction non membre


Sujet :

Langage C++

  1. #1
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut Heritage de Template Singleton : erreur fonction non membre
    bonjour,

    j'ai une classe template de singleton :
    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
    template <class T>
    class CSingletonStatic : public boost::noncopyable
    {
    protected:
    	// ctor / dtor
    	CSingletonStatic(){}
    	~CSingletonStatic(){}
     
     
    public:
    	static CSingletonStatic& Instance(void)
    	{
    		static CSingletonStatic instance;
    		return instance;
    	}
    };
    et un resource manager que je déclare en singleton :
    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
    typedef boost::shared_ptr<unsigned char>		CResourcePtr;
    typedef std::map<std::string, CResourcePtr>		CMapResources;
     
     
    class CResourcesManager : public CSingletonStatic<CResourcesManager>
    {
    	friend class CSingletonStatic<CResourcesManager>;
     
    private:
    	// ctor / dtor
    	CResourcesManager(void);
    	virtual ~CResourcesManager(void);
     
     
    public:
    	// récupération d'une resource
    	CResourcePtr Get(const std::string& sName);
     
     
    protected:
    	// chargement d'une resource
    	CResourcePtr Load(const std::string& sName);
     
     
    protected:
    	CMapResources		m_mapResources;
    };
    mais je ne peux pas appeler la méthode Get dans le main de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CResourcesManager::Instance().Get("test.dat");
    l'erreur du compilateur est simple :
    error C2039: 'Get'*: n'est pas membre de 'CSingletonStatic<T>'
    qu'est-ce que j'ai fait de travers pour que ça ne fonctionne pas ?

    ps: je suis sous vc7
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Points : 444
    Points
    444
    Par défaut
    Ta méthode statique de récupération de l'instance du singleton retourne un type CSingletonStatic<CResourcesManager>, qui n'a aucune méthode Get. Fais lui retourner un objet de type T (parce que si tu regardes bien, ton paramètre template ne sert à rien du tout dans ta class CSingletonStatic).

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Points : 444
    Points
    444
    Par défaut
    Citation Envoyé par roulious
    CResourcesManager::Instance() retourne un CSingletonStatic<CResourcesManager>, lequel ne contient pas de membre get, comme l'indique le compilateur. Pour que ton code fonctionne, il faut passer par un dynamic_cast :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dynamic_cast<CRessourcesManager&>(CResourcesManager::Instance()).Get();


    CResourcesManager::Instance crée une variable statique de type CSingletonStatic<ResourcesManager>. Comment veux-tu pouvoir la sous-caster en CResourcesManager sans que ça plante ?

  4. #4
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Merci bolhrak, tu m'as mis sur la voie de la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	static T& Instance(void)
    	{
    		static T instance;
    		return instance;
    	}
    l'instance que je créais n'était pas du bon type
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

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

Discussions similaires

  1. Sub ou fonction non définie (Erreur 35)
    Par xavion dans le forum VBA Word
    Réponses: 5
    Dernier message: 14/12/2012, 20h36
  2. Réponses: 18
    Dernier message: 01/03/2012, 10h34
  3. [AC-2003] Module VBA dans requête : Erreur "Fonction non définie dans l'expression"
    Par laurentw dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 12/11/2011, 14h32
  4. [MySQL] Erreur demande de fonction non définie
    Par pitou31 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/04/2010, 23h44
  5. Réponses: 2
    Dernier message: 01/06/2006, 14h54

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