[問題] template一問:complier不會顯示error

看板C_and_CPP (C/C++)作者 (我只想耍廢)時間16年前 (2009/04/09 17:07), 編輯推噓4(406)
留言10則, 5人參與, 最新討論串1/1
最近在學怎麼用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)

04/09 18:07, , 1F
template目前不支援分離模型 實做宣告必須合一
04/09 18:07, 1F

04/09 18:08, , 2F
還有 vector並不建議放指標
04/09 18:08, 2F

04/09 19:53, , 3F
因為 template 在具現化時才會進行完整的語法檢查
04/09 19:53, 3F

04/09 19:53, , 4F
你試著宣告一個 classA<int> 然後呼叫 Init1() 看看
04/09 19:53, 4F

04/09 19:54, , 5F
就會出現 error 了
04/09 19:54, 5F

04/09 20:17, , 6F
template的特性:沒用到就等於沒看到...XDDDD
04/09 20:17, 6F

04/09 20:44, , 7F
請問 vector不建議放指標的理由是?想知道為什麼c大會這樣說
04/09 20:44, 7F

04/09 21:30, , 8F
可能是因為要自行解決new delete的問題
04/09 21:30, 8F

04/09 21:32, , 9F
也怕兩個指標指向同一區塊,重覆delete會出錯
04/09 21:32, 9F

04/09 21:54, , 10F
#19eOTsPh 若要放 pointer 可考慮 boost::ptr_vector
04/09 21:54, 10F
文章代碼(AID): #19tRhWdl (C_and_CPP)
文章代碼(AID): #19tRhWdl (C_and_CPP)