2016-08-10 2 views
-4

다음 코드는 VS 2013 개의 컴파일러 에러를 발생 용 : 구문 오류 : 식별자'iterator '구문 오류 식별자 '반복자

  1. 템플릿 함수 정의

    오류 C2061을 던진다

  2. 해당 템플릿 함수의 특수화는

    erro R C2912 : 명시 적 전문성 'double getFillIn<double,double>(fillInOptions,double,std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>>,inputLoader *,va_list)'는 함수 템플릿

사람이 이유를 설명시겠습니까의 전문화 아닌가요? 나는 두 번째 오류가 첫 번째 오류의 결과라고 확신하지만, 왜 그것이 iterator 식별자인지 파악할 수 없다는 것을 이해하지 못합니다.

#include <map> 

template <typename T> class table { 
}; 

template <typename S, typename T> 
void f(S s, std::map<S, table<T>*>::iterator it); 
+2

시도 '유형 이름지도 *> :: iterator' : 당신은 형태가 될 것입니다 그것을 알 필요가있다. – songyuanyao

+0

틀렸어.'lookupTable'을 완전히 정의하기 전에'template class lookupTable ; '이 당신을 물들 일 것입니다. 주제 끄기 : 스위치의 기본 사례는 아무 것도 반환하지 않습니다. 올바르지 않거나 새로운'opt'가 혹시 몰래 들어가면, 컴파일러 경고와 약간의 디버깅에 좋습니다. – user4581301

답변

1

컴파일러가 아직 std::map<S, table<T>*>의 유형을 알고하지 않기 때문에, 아직 std::map<S, table<T>*>::iterator이 유형인지 알 수 없다 (이것은 구성원이 될 수있다).

template <typename S, typename T> 
void f(S s, typename std::map<S, table<T>*>::iterator it); 
+0

두 가지 오류를 모두 수정했습니다 - 정말 고마워요! – GodLovesUGaius