晚上搞了半天才發(fā)現(xiàn):原來(lái)類模板不能分文件寫(xiě)!
如:
template <class Type>
class TNumber
{
public:
~TNumber()
{
}
void SetItem(Type);
Type GetItem();
private:
Type m_item;
};
寫(xiě)到casual.h中f。而實(shí)現(xiàn)文件寫(xiě)入casual.cpp中,那么在main文件中調(diào)用時(shí)就會(huì)提示外部命令無(wú)法解析的錯(cuò)誤。
如:
1>main.obj : error LNK2019: 無(wú)法解析的外部符號(hào) "public: int __thiscall TNumber<int>::GetItem(void)" (?GetItem@?$TNumber@H@@QAEHXZ),該符號(hào)在函數(shù) _main 中被引用
看到一個(gè)解釋是:
因?yàn)槟0孱愒诰幾g的時(shí)候就相當(dāng)于宏定義,分兩個(gè)文件是找不到的。
解決辦法可以:
1.類模板定義和實(shí)現(xiàn)在同一文件。
2.在main文件中連續(xù)包含定義文件和實(shí)現(xiàn)文件.
#include "casual.h"
#include "casual.cpp"
int main()
{
TNumber<int> obj1;
cout << obj1.GetItem() << endl;
return 0;
}