2015-11-24 32 views
0

這是我的.h文件。鏈接錯誤,同時使模板化的Queue類

#include <vector> 

#include "basequeue.h" 

namespace advanced { 

template<class T> 
class AdvancedQueue { 
public: 
    virtual ~AdvancedQueue(); 

    void GetInfo(vector<T>* events); 

    void Push(const T& event); 
    bool Pop(T* event); 
    bool Wait(T* event); 

private: 
    BaseQueue<T> queue_; 
}; 

} 

而我在相應的cpp文件中有這些實現。當我使用它時,我有像這樣的鏈接問題....

function advanced::Service::Handler(BaseHandler*): error: undefined reference to 'advanced::AdvancedQueue<advanced::Dashboard>::Pop(advanced::Dashboard*)' 

有沒有一種方法來指定我將使用「儀表板」類?我必須單獨做這件事嗎?

+1

的可能的複製[爲什麼模板只能在頭文件中實現?(http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-文件) –

+0

在哪裏會實現'Pop(T *);'?究竟! –

+0

Pop(T *)在CPP文件中實現 – Narabhut

回答

0

有沒有辦法指定我將使用「儀表板」類? 我必須單獨做這件事嗎?

使用模板,您只是通過在源代碼中使用它來隱式指定您對儀表板的使用。

爲了滿足該鏈路誤差,與

bool Pop(T* event) { return true; } // Obviously, flesh this out as you wish. 

取代

bool Pop(T* event); 

雖然可以爲特定的模板的情況下提供源,我抑制那種。它似乎有擊敗擺在首位的模板的值,並且在使用時,但沒有必要,它表明開發商沒有使用模板的一個清晰的認識。