1、我们在写类的时候一般通常将声明放到.h文件,函数实现放入.cpp,如下: //.h class Mystring{ public: Mystring(const char* str = "empty"); Mystring(const char* data, int len); ... ... ~Mystring(); int myReplace(const char* from, const char* to); int myappend(const char* data); ... ... private: char* m_data; unsigned int m_len; }; //.cpp Mystring::Mystring(const char* str){ ... } Mystring::Mystring(const char* data, int len){ ... } ... ... 2、但是在写类模板是将声明放到.h文件,函数实现放入.cpp,链接器会报错(提示找不到实现)如下: //.h template <class T> class Stack { public: Stack(int s = 10); ~Stack(); void push(const T n); T pop(); private: int m_size; int m_top; T* m_stackPtr; }; //.cpp template <class T> Stack<T>::Stack(int s){ ... } template <class T> Stack<T>::~Stack(){ ... } 这样编译的话会有提示找不到或者未定义实现 解决办法: 1、将实现代码放入.tpp,在.h中包含此.tpp文件 2、使用显示声明来实现分离:在.cpp实现代码末尾加入显示声明要使用模板类的实例。eg: template class TestTemplate<int>; template class TestTemplate<float>; 注:以上例子只为了说明与论证此问题