我使用Abstract模板类和两个子类实现了“Strategy”设计模式。是这样的:
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)
答案 0 :(得分:3)
还有另一个子类,就像 这个,并且alter实现于 cpp文件。
没有办法 - 它必须在标题中。
答案 1 :(得分:0)
这似乎是一个漂亮的菜鸟错误。由于Neighborhood是一个抽象类,我必须始终将它用作指针( EDIT :或引用),因为它必须永远不会被实例化。
更改签名并且工作正常。
编辑:另外,感谢Neil,我知道“它必须在标题中”。