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

时间:2014-01-02 01:47:04

标签: c++ oop templates

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

A.H

template <typename T>
class A
{
  T data;

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

  void addItem(T d);
}

A.cpp

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

};

另一个类模板B如下所示:

B.h

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

   void doSomething();
};

B.cpp

#include "B.h"

void B::doSomething()
{
   addItem(1);
}

在VS 2012下编译时,我收到错误消息:

  

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

为什么addItem()成员函数不能解析?你能推荐一种方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

你需要将A.cpp的内容移动到A.h,因为C ++对于未在头文件中定义的模板非常挑剔。