2014-01-13 149 views
-1

我有我的基类:C++:在基类模板方法

class UnitTestThread : public testing::Test 
{ 
    public: 
     /// purgeQueue() 
     template <typename T> void purgeQueue(const ___handle queue, T &data) const; 
}; 

我的继承类:

class HmiTest : public UnitTestThread 
{ 
    public:   
     // Sets up the test fixture. 
     virtual void SetUp(); 
     // ... 
} 

void HmiTest::SetUp() 
{ 
    // By default , purge all the queues 
    CONTROL_ACTION_PARAM controlAction; 
    purgeQueue(ApplicationContext.queueControlActionsToThermostat, controlAction); 
} 

而且我有一个链接错误:

HmiTest.obj : error LNK2019: unresolved external symbol "public: void __thiscall UnitTestThread::purgeQueue<struct CONTROL_ACTION_PARAM>(void * const,struct CONTROL_ACTION_PARAM &)const " ([email protected][email protected]@@[email protected]@[email protected]@@Z) referenced in function "public: virtual void __thiscall HmiTest::SetUp(void)" ([email protected]@@UAEXXZ) 

我不明白为什么...:-S

谢谢非常感谢你们的帮助!

+1

凡'purgeQueue'定义? – StoryTeller

+0

[为什么模板只能在头文件中实现?](http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) – Jarod42

+0

@Anthony你需要接受一个答案。 –

回答

3

你已经声明了方法,但是你没有实现它。或者如果你有,它在一个cpp文件中,这是不好的(需要在模板方法的头文件中,或者使用显式的模板实例化)。

你需要实现类定义之后方法:

class UnitTestThread : public testing::Test 
{ 
    public: 
     /// purgeQueue() 
     template <typename T> 
     void purgeQueue(const ___handle queue, T &data) const; 
}; 

template <typename T> 
void UnitTestThread::purgeQueue(const ___handle queue, T &data) const 
{ 
    // Do something 
} 
+0

我在UnitTestThread.cpp实现文件 /// purgeQueue() 模板无效UnitTestThread :: purgeQueue(常量___handle队列,T&数据)常量 { // ... } – Anthony

+0

@Anthony他说,你的模板需要在头文件中定义,而不是.cpp文件。 – Simple

+0

或者如果您确切知道您将使用哪种类型,则使用显式模板实例化。 –

2

模板实现应包括在头(.h)文件