2014-01-13 143 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)文件