[問題] 請問template中語法的問題

看板C_and_CPP作者 (raison detre)時間14年前 (2011/07/12 17:54), 編輯推噓3(3012)
留言15則, 8人參與, 最新討論串1/1
以下是小弟的程式碼 我原本在xlc++中編譯是沒問題的 但是我移到g++卻沒辦法編譯的 我在AIX與Linux中使用g++都會發生一樣的情況 請問是否有人知道該如何修改呢 template <typename VALUE> class TestMapList { private: typedef std::map< std::string , VALUE > MapList; MapList m_mapList; public: TestMapList() { MapList::iterator _it; } virtual ~TestMapList(){} }; ///// 以下為錯誤訊息 ../UnitTest_MapList.cpp:18: error: dependent-name ‘std::map::iterator’ is parsed as a non-type, but instantiation yields a type ../UnitTest_MapList.cpp:18: note: say ‘typename std::map::iterator’ if a type is meant -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.220.71.34

07/12 18:39, , 1F
typename MapList::iterator
07/12 18:39, 1F

07/12 19:49, , 2F
=..=原po,這好像是gcc新版的小bug喔.的確有人是用1f的方
07/12 19:49, 2F

07/12 19:49, , 3F
法解決.
07/12 19:49, 3F

07/12 20:04, , 4F
這應該不算 bug 吧 ...
07/12 20:04, 4F

07/12 20:13, , 5F
的確要加typename 因為compiler第一次parse template的時候
07/12 20:13, 5F

07/12 20:14, , 6F
沒辦法分辨MapList::iterator是一個type還是value
07/12 20:14, 6F

07/12 20:40, , 7F
樓上大神學長
07/12 20:40, 7F

07/12 20:48, , 8F
嚴格來說不是沒辦法分辨,而是這種狀況一律假設 value
07/12 20:48, 8F

07/12 20:49, , 9F
07/12 20:49, 9F

07/12 21:00, , 10F
啊我收回上一句話,要說沒辦法分辨也對啦 xD
07/12 21:00, 10F

07/12 21:17, , 11F
因為之前的版本沒這問題,這個問題已經有人熱烈辦論過
07/12 21:17, 11F

07/12 21:18, , 12F
這不是bug 要加typename是標準行為
07/12 21:18, 12F

07/13 09:02, , 13F
感謝大家,又學到了一課
07/13 09:02, 13F

07/14 13:42, , 14F
GCC這麼貼心還會提醒啊 之前遇到好像沒這麼好XD
07/14 13:42, 14F

07/14 13:58, , 15F
因為之前不擋這個.現在是直接發出error
07/14 13:58, 15F
文章代碼(AID): #1E71d9CM (C_and_CPP)