2013-10-03 178 views
2

我有以下源代碼,用MinGW編譯。但是,當我嘗試建立我有一個編譯類型錯誤:GCC編譯類型錯誤:預期的類型說明符

main.cpp:11: error: expected type-specifier 
    using Iter = MyMap::iterator; 
      ^
main.cpp:12: error: expected type-specifier 
    using CIter = MyMap::const_iterator; 
      ^

GCC MyMap之前預計的說明符。但是它期望的是哪個說明符?

#include <ctime> 
#include <map> 

template< typename T > 
class MyClass 
{ 
private: 
    class Inner {}; 

    using MyMap = std::map< time_t, Inner >; 
    using Iter = MyMap::iterator; 
    using CIter = MyMap::const_iterator; 
}; 

int main() 
{ 
    return 0; 
} 
+1

您可能想閱讀[this old answer](http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-the-template-and-typename-關鍵字/ 613132#613132)。 –

+0

非常感謝。我會仔細閱讀 –

+0

我的印象是這個問題每天會在SO上彈出幾次。然而,我沒有找到一個好的重複。也許這是因爲症狀可能非常不同(症狀是問題標題的全部內容)? – Walter

回答

11

你只需要添加typename

using Iter = typename MyMap::iterator; 

否則編譯器不知道::iterator是指一類,而不是一個成員變量或方法。

+0

你剛剛救了我幾個小時的調試! – user90593