Accessing member function from inherited class template
本问题已经有最佳答案,请猛点这里访问。
我有一个类模板
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.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)
为什么
您需要将A.CPP的内容移动到A.h中,因为C++对模板中未定义的模板非常挑剔。