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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
#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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
class Decors: public Observable<Decors>{
public:
 
	Decors();
	~Decors();
Voici "l'interface" IObserver dont les observers doivent hériter:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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