看板 C_and_CPP 關於我們 聯絡資訊
以下是小弟的程式碼 我原本在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
legnaleurc:typename MapList::iterator 07/12 18:39
angleevil:=..=原po,這好像是gcc新版的小bug喔.的確有人是用1f的方 07/12 19:49
angleevil:法解決. 07/12 19:49
legnaleurc:這應該不算 bug 吧 ... 07/12 20:04
PkmX:的確要加typename 因為compiler第一次parse template的時候 07/12 20:13
PkmX:沒辦法分辨MapList::iterator是一個type還是value 07/12 20:14
xatier:樓上大神學長 07/12 20:40
Favonia:嚴格來說不是沒辦法分辨,而是這種狀況一律假設 value 07/12 20:48
Favonia:可以看 http://en.wikipedia.org/wiki/Typename 07/12 20:49
Favonia:啊我收回上一句話,要說沒辦法分辨也對啦 xD 07/12 21:00
angleevil:因為之前的版本沒這問題,這個問題已經有人熱烈辦論過 07/12 21:17
littleshan:這不是bug 要加typename是標準行為 07/12 21:18
ireullin:感謝大家,又學到了一課 07/13 09:02
hilorrk:GCC這麼貼心還會提醒啊 之前遇到好像沒這麼好XD 07/14 13:42
angleevil:因為之前不擋這個.現在是直接發出error 07/14 13:58