5
在C++中,我試圖爲我的模板類獲取std::vector::iterator
。但是,當我編譯它時,出現錯誤:error C2146: syntax error : missing ';' before identifier 'iterator'
,error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
。我也得到警告:warning C4346: 'std::vector<T>::iterator' : dependent name is not a type
:C++模板std :: vector :: iterator錯誤
#include <vector>
template<class T> class v1{
typedef std::vector<T>::iterator iterator; // Error here
};
class v2{
typedef std::vector<int>::iterator iterator; // (This works)
};
我甚至試過
template<typename T> class v1{
typedef std::vector<T>::iterator iterator;
};
而且
template<typename T = int> class v1{
typedef std::vector<T>::iterator iterator;
};
可能的重複[哪裏和爲什麼我必須放置「模板」和「typename」關鍵字?](http://stackoverflow.com/問題/ 610245 /爲什麼要把模板和類型名稱關鍵字) – juanchopanza
clang ++已知有相當不錯的錯誤消息,尤其是對於這類錯誤。在這種情況下,它表示*錯誤:在依賴類型名稱之前缺少'typename'std :: vector :: iterator'*。如果您無法理解來自其他編譯器的錯誤消息,我建議嘗試使用clang(例如,在線編譯器)。 –
dyp
@DyP GCC有類似的錯誤消息。 – Rapptz