C++ 从继承的类模板访问成员函数

C++ 从继承的类模板访问成员函数,c++,oop,templates,C++,Oop,Templates,我有一个类模板a,如下所示: A.h template <typename T> class A { T data; public: A(void) { }; ~A(void) { }; void addItem(T d); } #include "a.h" class B : public A<int> { public: B(void) : A<int>() {}; ~B(void) {}; void d

我有一个类模板
a
,如下所示:

A.h

template <typename T>
class A
{
  T data;

  public:
  A(void) { };
  ~A(void) { };

  void addItem(T d);
}
#include "a.h"
class B : public A<int>
{
   public:
   B(void) : A<int>() {};
   ~B(void) {};

   void doSomething();
};
B.cpp

template <typename T>
void A<T>::addItem(T data)
{

};
#include "B.h"

void B::doSomething()
{
   addItem(1);
}
在VS 2012下编译时,我收到一个错误,上面写着:

错误LNK2019:未解析的外部符号“public:void\u thiscall A::addItem(int)”(?addItem@$A@H@@QAEXH@Z)在函数“public:void u thiscall B::doSomething(void)”中引用(?doSomething@B@@QAEXZ)


为什么
addItem()
成员函数不能解析?你能推荐一种修复的方法吗?< /P> < P>你需要把A.CPP的内容移到A.h中,因为C++对页眉中没有定义的模板非常挑剔。你不搜索吗@LightnessRacesinOrbit你真的不需要自鸣得意。@user12748:指示你搜索并不是“自鸣得意”。@LightnessRacesinOrbit:好吧,如果这是严格的指示,那么你如何尝试修剪你只是居高临下或表达判断的不必要部分。@user12748:唉,我没有这样做。我只是要求你在发布另一份副本之前进行搜索。你不必对这件事如此防备。我要走了。@jogojapan重新编码更合适吗?@jogojapan干杯-祝你今天愉快7;^)C++不关心你是否在标题中定义了函数模板。它只想在每个翻译单元中定义一个定义,当你认为在编译过程中执行模板实例化而不是链接时,这是非常合理的。@在轨道上的轻量级种族,你想向问题海报解释什么构成翻译单位?@ Lexness CraceSeReNoRe:我知道你来自哪里,我只是觉得用词来回答这个问题是恰当的