在編譯其他人的Program 時發現的。(也多虧這些人有釋出這種奇奇怪怪的code,
我才發現g++ 編譯器在處理template時是怎麼運作的。)
example:
example:
template<typename T> class A{ public: T m_A; void funcTest() { map<T , int> mapTempTable; /* 這部分沒問題, OK! */ map<T, int>::iterator it; /* 編譯器會出錯! */ } };
第8行如果這樣子寫的話,g++ 編譯器會出錯!硬是要在前面加個typename 變成:
typename map<T, int>::iterator it;
才能夠解決!
這是為什麼呢? 因為:: scope operator 接在它後面的可以是成員變數、函數或是
物件類型。
如果不加上typename的話,編譯器可能會將iterator 誤認為成員變數。
(實際上iterator是一個物件類型)
所以要加上typename,讓編譯器知道這個東西是一個物件類型。
Ref:
沒有留言:
張貼留言