在編譯其他人的Program 時發現的。(也多虧這些人有釋出這種奇奇怪怪的code,
我才發現g++ 編譯器在處理template時是怎麼運作的。)
example:
第10行如果這樣子寫的話,g++ 編譯器會出錯!硬是要在前面加個typename 變成:
typename map<T, int>::iterator it;
才能夠解決!
這是為什麼呢? 因為:: scope operator 接在它後面的可以是成員變數、函數或是
物件類型。
如果不加上typename的話,編譯器可能會將iterator 誤認為成員變數。
(實際上iterator是一個物件類型)
所以要加上typename,讓編譯器知道這個東西是一個物件類型。
Ref:
http://lnk.in/73g7
http://www.webdesgin-information.com/?p=54
http://pages.cs.wisc.edu/~driscoll/typename.html
沒有留言:
張貼留言