作者darkhcv (我只想耍廢)
看板C_and_CPP
標題[問題] template一問:complier不會顯示error
時間Thu Apr 9 17:07:40 2009
最近在學怎麼用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