J'ai implémenté le modèle de conception "Stratégie" à l'aide d'une classe de modèle abstrait et de deux sous-classes. Il en va comme ceci:Liaison d'une classe de modèle à l'aide d'une autre classe de modèle (erreur LNK2001)
template <class T>
class Neighbourhood {
public:
virtual void alter(std::vector<T>& array, int i1, int i2) = 0;
};
et
template <class T>
class Swap : public Neighbourhood<T> {
public:
virtual void alter(std::vector<T>& array, int i1, int i2);
};
Il y a une autre sous-classe, comme celui-ci, et alter
est implémenté dans le fichier cpp. OK bien! Maintenant, je déclare une autre méthode, dans une autre classe (y compris le fichier d'en-tête neighbourhood
, bien sûr), comme ceci:
void lSearch(/*parameters*/, Neighbourhood<LotSolutionInformation> nhood);
Il compile bien et proprement. Lorsque vous commencez à créer un lien, je reçois l'erreur suivante:
1>SolverFV.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall lsc::Neighbourhood<class LotSolutionInformation>::alter(class std::vector<class LotSolutionInformation,class std::allocator<class LotSolutionInformation> > &,int,int)" ([email protected][email protected]@@@[email protected]@[email protected]@@[email protected]@@@[email protected]@@[email protected]@[email protected])
En fait, vous pourriez préférer utiliser des références à Neighbourhood au lieu de pointeurs. –
Je voudrais upvote s'il ne disait pas que vous devez utiliser des pointeurs. Qu'est-ce que @Luc dit –
Merci à vous deux :) –