2013-10-03 2 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

당신은 [이 오래된 대답] (http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-the-template-and-typename- 키워드/613132 # 613132). –

+0

대단히 감사합니다. 나는 그것을주의 깊게 읽을 것이다 –

+0

나는이 문제가 하루에 여러 번 나타나서 인상을 받았다. 그러나 나는 훌륭한 복제품을 찾지 못했습니다. 아마도 이것은 증상이 상당히 다를 수 있기 때문입니다 (증상은 질문 제목이 전부입니까). – Walter

답변

11

당신은 typename을 추가해야

using Iter = typename MyMap::iterator; 

그렇지 않으면 컴파일러가 ::iterator이 형이 아닌 멤버 변수 또는 메서드를 참조 알고하지 않습니다.

+0

방금 ​​디버깅 시간을 절약 해 줬습니다! – user90593

관련 문제