Bonjour,
Je souhaite réaliser une classe permettant de gérer le chargement des ressource sons et images avec sfml. Le chargement étant identique au type prêt (sf::Image ou sf::SoundBuffer) entre les deux, j'ai décidé de créer une classe template singleton qui charge et conserve les médias en mémoire. L'objectif est donc de pouvoir charger des médias de la manière suivante :
Pour réaliser cette classe, je m'y suis pris de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 MediaManager<sf::SoundBuffer>::getInstance()->getMedia("chemin vers le son"); MediaManager<sf::Image>::getInstance()->getMedia("chemin vers l'image");
MediaManager.hpp :
Avec simplement la création de la classe sous forme de singleton, je me retrouve avec une erreur de link sur getinstance() :
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 #include <SFML/Audio.hpp> #include <iostream> #include <map> template<class T> class MediaManager { public: static MediaManager<T>* getInstance() { if (NULL == _singleton) { std::cout << "DEBUG: MediaManager | Creation du singleton." << std::endl; _singleton = new MediaManager<T>; } return _singleton; } private: static MediaManager<T>* _singleton; //Pointeur du singleton MediaManager(); }; template<class T> MediaManager<T>* MediaManager<T>::_singleton = NULL;
Je ne vois pas ce que je fais de mal ici, une idée pour me guider ?Erreur 2 error LNK2019: symbole externe non résolu "private: __thiscall MediaManager<class sf::SoundBuffer>::MediaManager<class sf::SoundBuffer>(void)" (??0?$MediaManager@VSoundBuffer@sf@@@@AAE@XZ) référencé dans la fonction "public: static class MediaManager<class sf::SoundBuffer> * __cdecl MediaManager<class sf::SoundBuffer>::getInstance(void)" (?getInstance@?$MediaManager@VSoundBuffer@sf@@@@SAPAV1@XZ)
Partager