模板類的定義和實現
//Tpl.h
#pragmaonce
template<classT>
classCTpl
{
public:
CTpl();
virtual~CTpl();
voidTest(Tt);
};
2.實現部分
//Tpl.cpp
#include"Tpl.h"
template<classT>
CTpl<T>::CTpl()
{
}
template<classT>
CTpl<T>::~CTpl()
{
}
template<classT>
voidCTpl<T>::Test(Tt)
{
}3.習慣錯誤用法
//main.cpp
#include"Tpl.h"
intmain()
{
CTpl<char>ts;
ts.Test(3);
return0;
}
build時出現link錯誤main.obj : error LNK2001: unresolved external symbol "public:virtual __thiscallCTpl<char>::~CTpl<char>(void)"(??1?$CTpl@D@@UAE@XZ)main.obj : error LNK2001: unresolved external symbol "public: void__thiscall CTpl<char>::Test(char)"(?Test@?$CTpl@D@@QAEXD@Z)main.obj : error LNK2001: unresolved external symbol "public:__thiscallCTpl<char>::CTpl<char>(void)"(??0?$CTpl@D@@QAE@XZ)這組錯誤信息和project中不加入Tpl.cpp的錯誤信息一樣,即沒有CTpl<char>的實現代碼我們把Tpl.cpp包涵到main.cpp中,問題解決4.正確用法
//main.cpp
#include"tpl.cpp"
intmain()
{
CTpl<char>ts;
ts.Test(3);
return0;
}
5.總結1.在使用以.h,.cpp分離實現模板類時,不能像使用普通類一樣只簡單的包涵.h頭文件,應該在使用模板類的cpp文件中引入模板類相應的cpp文件2.將模板類的聲明與實現都放在.h中(在多個cpp中使用不同模板參數時可能會引起重複定義的編譯錯誤)
推薦閱讀:
※XMind模板那裡可以下載?
※【代碼應用】用代碼製作詩詞模板
※【放射微學堂】骨關節病變-X線診斷影像報告模板
※四六級考前六天作文模板萬能句型大全
※有哪些 Jekyll 模板值得推薦?