Problème de template sur Design pattern Observer - Observable
bonjour tout le monde,
J'ai un problème lors de l'édition de liens, qui me dit:
Partie.obj : error LNK2019: symbole externe non résolu "public: void __thiscall Observable<class Decors>::addObserver(class IObserver<class Decors> &)"
Bon je sais que cela signifie que la méthode n'est pas définie.
Mais pourtant elle l'est.
Je vous met le bout de code qui me génère cette erreur:
Code:
1 2 3 4
|
Vaisseau* vaisseau =new Vaisseau('-',5,40);
Decors& leDecor=*new Decors();
leDecor.addObserver(*vaisseau); |
Je suppose que ma syntaxe n'est pas bonne mais je ne vois pas comment la corriger. Je vous mets les classes/templates que j'utilise. Si quelqu'un pouvait me dire ce qui ne va pas dans mon code.
L'idée est de notifier les observer qu'il y a eut du changement. Maintenant il faut savoir qui a lancé la notification, et c'est pourquoi je me suis tourné vers les templates pour mettre un type générique dans la méthode notificationEvent de l'Observer.
Voici le code de mon template Observable:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include "Observable.h"
#include "IObserver.h"
template<class T>
void Observable<T>::notify(){
// Notifier tous les observers
for (std::list<IObserver<T> *>::iterator=_observers.begin();it!=_observers.end();it++) {
(*it)->notificationEvent(static_cast<T *>(this));
}
}
template<class T>
void Observable<T>::addObserver(IObserver<T>& observer){
// Ajouter un observer a la liste
_observers.push_back(&observer);
}
template<class T>
void Observable<T>::removeObserver(IObserver<T>& observer){
//TODO faire find de observer
} |
Et la classe Decors qui en hérite:
Code:
1 2 3 4 5
| class Decors: public Observable<Decors>{
public:
Decors();
~Decors(); |
Voici "l'interface" IObserver dont les observers doivent hériter:
Code:
1 2 3 4 5 6 7 8 9 10
| #ifndef IObserver_h
#define IObserver_h
template <class T>
class IObserver{
public:
IObserver() {}
virtual ~IObserver() {}
virtual void notificationEvent(T& donnees)= 0;
};
#endif |
Et enfin la classe Vaisseau qui hérite de IObserver
Code:
1 2 3 4
| class Vaisseau:public AbstractVaisseau, public IObserver<Decors>{
public:
Vaisseau();
virtual void notificationEvent(Decors& decor); |
Merci à ceux/celles qui pourront m'éclairer, ou m'expliquer comment faire.
PS: bonne fêtes à tous