一般類的定義和實現組織方式:將定義放在.h文件中,實現放在.cpp文件中。
C++中的模板是C++在發展過程中新添的新生力量,template的聲明和實現不同于一般的類定義與實現和函數的聲明與定義,故在含有模板的C++程序的組織方式就不同于一般的定義與實現相分離的方式。
我曾經遇到的問題: 當在GUN中編譯時老是無法通過,錯誤信息大概是無法找到函數。然后將程序搬到VC6下編譯,同樣出現連接錯誤。
問題原因:
C++標準中說明:在使用模板時C++支持兩種程序組織方式:包含模式與分離模式。包含模式也就是將類的定義與實現同放在.h 文件中,分離模式也就是將定義與實現分離,也就是我采用的方式。但很多編譯器不支持分離模式,只支持包含模式。
通常采用的解決方法:
1. 干脆直接使用包含模式,即將模板類的定義與實現同寫在.h文件中。(我不太喜歡這種寫法)
2. 使用分離模式,但是在使用時不引用模板類的頭文件,而是引用模板類的實現文件。(不太符合一般習慣)
3. 使用分離模式,在模板類頭文件中引用實現文件。(這個方法我在VC6和Dev C++下都沒有成功,不知道是哪里出了問題)
4. 使用分離模式,在模板類中頭文件中實例化一個你需要對象。(十分笨拙的方法,不利于使用)
5. 使用分離模式,但是另外定義.h文件,在這個文件中引用模板的頭文件和實現文件,在使用時引用這個另外定義的.h文件。(覺得這個方法還不錯,不過也不知道有什么缺點)