我有一个类模板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()
成员函数不能解析?你能推荐一种方法来解决这个问题吗?
答案 0 :(得分:2)
你需要将A.cpp的内容移动到A.h,因为C ++对于未在头文件中定义的模板非常挑剔。