可能重复:
Why can templates only be implemented in the header file?C++模板基本程序,链接器找不到构造函数和析构函数
你好。我在C++中有一个愚蠢的程序,在头文件中包含一个使用模板的类和一个带有方法实现的cpp文件。
这是标头:
namespace SynQueueing {
template < class T, unsigned long SIZE = 0 >
class CommQueue {
public:
CommQueue();
~CommQueue();
}
}
这是CPP
#include "myheader.h"
using namespace SynQueueing;
/* Default constructor */
template < class T, unsigned long SIZE >
CommQueue<T, SIZE>::CommQueue() {
}
/* Default destructor */
template < class T, unsigned long SIZE >
CommQueue<T, SIZE>::~CommQueue() {
}
在主我简单地创建CommQueue
CommQueue CQ的对象;
当然在cpp主文件中包含CommQueue.h。
好,编译器都疯了,告诉我这一点:
/tmp/ccvJL8VI.o:在函数'主:
entry.cpp :(文字+ 0x2c上):未定义参考`SynQueueing :: CommQueue :: CommQueue() '
entry.cpp :(文本+ 0x10e):未定义参考`SynQueueing :: CommQueue ::〜CommQueue()'
entry.cpp :(.text + 0x135):对'SynQueueing :: CommQueue ::〜CommQueu的未定义引用E()”
collect2:LD返回1个退出状态
entry.cpp是其中主所在的文件。 有什么想法?
感谢
请参阅:http://www.parashift.com/c++-faq-lite/templates.html#faq-35.15 – icecrime 2010-11-23 12:29:22
除了template-in-header问题之外,您是否还需要提供模板参数到实例化?例如`CommQueue cq;` –
2010-11-23 12:34:21