看板 C_and_CPP 關於我們 聯絡資訊
最近在學怎麼用template 我用的環境是Visual Studio 2005 SP1 剛剛偶然發現了一個問題 我總共用了三個檔案"A.cpp" "A.h" "A.inl" 然後故意在"A.h"以及"A.inl"裡留下了語法錯誤的程式碼(都沒加";") 可是當我編譯A.cpp時,居然卻編譯通過沒有顯示complier error出來 我的程式碼大概長下面這個樣子,請問有人可以告訴我這是為什麼嗎?謝謝~ in file A.h template<typename T> class classA { public: classA(){} ~classA(){} void Init1(size_t uSize = 0) { m_Vector1.reserve(uSize) // error 1 : 沒加";" } void Init2(size_t uSize = 0); void Init3(size_t uSize = 0); private: protected: std::vector<T*> m_Vector1; std::vector<T*> m_Vector2; std::vector<T*> m_Vector3; }; template<typename T> void classA<T>::Init2(size_t uSize) { m_Vector2.reserve(uSize) // error 2 : 沒加";" } #include "A.inl" in file A.inl template<typename T> void classA<T>::Init3(size_t uSize) { m_Vector3.reserve(uSize) // error 3 : 沒加";" } in file A.cpp // Do nothing, just include A.h #include "A.h" -- 世界上最難發現的 是遺落在沙漠中的一根針? 世界上最難發現的 是黑夜裡落下的烏鴉羽毛? 世界上最難發現的 是自己的誤解 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.128.139.157 ※ 編輯: darkhcv 來自: 220.128.139.157 (04/09 17:09) ※ 編輯: darkhcv 來自: 220.128.139.157 (04/09 17:13)
chrisdar:template目前不支援分離模型 實做宣告必須合一 04/09 18:07
chrisdar:還有 vector並不建議放指標 04/09 18:08
littleshan:因為 template 在具現化時才會進行完整的語法檢查 04/09 19:53
littleshan:你試著宣告一個 classA<int> 然後呼叫 Init1() 看看 04/09 19:53
littleshan:就會出現 error 了 04/09 19:54
james732:template的特性:沒用到就等於沒看到...XDDDD 04/09 20:17
DRLai:請問 vector不建議放指標的理由是?想知道為什麼c大會這樣說 04/09 20:44
tsaiminghan:可能是因為要自行解決new delete的問題 04/09 21:30
tsaiminghan:也怕兩個指標指向同一區塊,重覆delete會出錯 04/09 21:32
littleshan: #19eOTsPh 若要放 pointer 可考慮 boost::ptr_vector 04/09 21:54