2014-05-08 147 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