带模板化虚拟方法的C ++链接器错误

时间:2015-10-17 16:02:59

标签: c++ templates linker polymorphism

我有一个模板化界面和模板化实现。我还有一个方法,将接口的特化作为参数。我收到链接器错误:

  

“未找到建筑物的符号......

为什么?实现此目的的正确方法是什么:一个适用于各种类型的接口,一个适用于各种类型的实现,以及一个以特定类型的接口为参数的方法?

以下示例只是一个最小的示例,我的实际类具有不同的功能。

由于

#include <iostream>

template<class T>
class IStore{
public:
  virtual T get() = 0;
  virtual void set(T t) = 0;
};

template<class T>
class SimpleStore : public IStore<T>{
public:
  T get() override{    return value;   }
  void set(T t) override{    value = t;  }
private:
  T value;
};

void Print(IStore<double> mydouble){  std::cout<<mydouble.get(); }

int main(int argc, const char * argv[]) {
  SimpleStore<double> one;
  one.set(1.0);
  Print(one);
  return 0;
}

1 个答案:

答案 0 :(得分:1)

我发现您的代码存在一个主要问题:您将抽象类作为值参数。这会导致各种不好的事情。事实上,这可能是您提出的问题的根源,但我对此并不确定。