2014-05-08 150 views
-2

我想實現一個通用的Queue類。 模板類看起來像: Queue.hC++未定義的函數參考

template <class T> 
class Queue { 
public: 
    Queue() {} 
~Queue() {} 

... 

    void enqueue(const T& e); 
    T dequeue(void); 

    int Size(void) const { return s1.size() + s2.size();}  

private: 
    std::stack<T> s1; 
    std::stack<T> s2; 
}; 

#include "Queue.cpp" 

和執行它看起來像:
Queue.cpp:

#include "Queue.h" 

template <class T> 
void Queue<T>::enqueue(const T& e) 
{ 
//... 
} 

template <class T> 
T Queue<T>::dequeue() 
{ 
//... 
} 

我的問題是,我不能打電話這個類的一些函數,我在Queue.cpp文件中實現了。

main.cpp中:

int main() { 
Queue<int> myQueue; 

const int a = 1; 
myQueue.enqueue(a); 

myQueue.Size(); 

return 0; 
} 

我總是成爲follwing埃羅: 未定義參考到隊列::入列(INT常量&)

[錯誤] LD返回1個退出狀態

Makefile.winrecipe用於目標'MYQueue.exe'失敗

+0

我包括根據這個職位,實施文件在標題的結尾。現在我成爲錯誤:[錯誤]重新定義'隊列 ::隊列(常量隊列&)'等... – user3605330

回答

1

將整個模板定義包括它的mem ber函數在一個頭文件中。

+0

替代方法:在.cpp文件中使用正確的模板參數顯式實例化模板。 – Deduplicator

+0

@Deduplicator你是對的。 –

+0

@複製者:我不明白,你可以展示它嗎? – user3605330