关于c ++:从继承的类模板访问成员函数

Accessing member function from inherited class template

本问题已经有最佳答案,请猛点这里访问。

我有一个类模板A,它看起来如下:

A.

1
2
3
4
5
6
7
8
9
10
11
template <typename T>
class A
{
  T data;

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

  void addItem(T d);
}

A.CPP

1
2
3
4
5
template <typename T>
void A<T>::addItem(T data)
{

};

还有一个类模板B,它看起来像这样:

B.H

1
2
3
4
5
6
7
8
9
#include"a.h"
class B : public A<int>
{
   public:
   B(void) : A<int>() {};
   ~B(void) {};

   void doSomething();
};

B.CPP

1
2
3
4
5
6
#include"B.h"

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

在vs 2012下编译时,我得到一个错误,它说:

error LNK2019: unresolved external symbol"public: void __thiscall A::addItem(int)" (?addItem@?$A@H@@QAEXH@Z) referenced in function"public: void __thiscall B::doSomething(void)" (?doSomething@B@@QAEXXZ)

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


您需要将A.CPP的内容移动到A.h中,因为C++对模板中未定义的模板非常挑剔。