Я реализовал шаблон проектирования «Стратегия», используя абстрактный шаблон класса и два подкласса. Идет так:
template <class T>
class Neighbourhood {
public:
virtual void alter(std::vector<T>& array, int i1, int i2) = 0;
};
и
template <class T>
class Swap : public Neighbourhood<T> {
public:
virtual void alter(std::vector<T>& array, int i1, int i2);
};
Есть еще один подкласс, такой же, как этот, и alter
реализован в файле cpp. Хорошо! Теперь я объявляю другой метод в другом классе (включая, конечно, neighbourhood
заголовочный файл), например:
void lSearch(/*parameters*/, Neighbourhood<LotSolutionInformation> nhood);
Компилируется нормально и чисто. При начале ссылки я получаю следующую ошибку:
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)" (?alter@?$Neighbourhood@VLotSolutionInformation@@@lsc@@UAEXAAV?$vector@VLotSolutionInformation@@V?$allocator@VLotSolutionInformation@@@std@@@std@@HH@Z)