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>;
注:以上例子只为了说明与论证此问题
来源:CSDN
作者:only_a_Heroic_car
链接:https://blog.csdn.net/only_a_Heroic_car/article/details/103782956