使用另一个模板类链接模板类(错误LNK2001)

时间:2010-06-11 12:36:12

标签: c++ visual-studio visual-c++ templates abstract-class

我使用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)

2 个答案:

答案 0 :(得分:3)

  

还有另一个子类,就像   这个,并且alter实现于   cpp文件。

没有办法 - 它必须在标题中。

答案 1 :(得分:0)

这似乎是一个漂亮的菜鸟错误。由于Neighborhood是一个抽象类,我必须始终将它用作指针( EDIT :或引用),因为它必须永远不会被实例化。

更改签名并且工作正常。

编辑:另外,感谢Neil,我知道“它必须在标题中”。