2012-10-05 2 views
1

반복자를 선언하여지도를 탐색하고 값을 찾는 데 문제가있었습니다. " 'fibiter'전에 '예상되는 초기화 프로그램'오류가 발생합니다. map <int, int>::iterator반복자 탐색 기법 매핑

반복자 →

map <int, int> fibHash; 

int memoized_fib(int n) 
{ 
    map <int, int> iterator fibiter = fibHash.find(n); //ERROR HERE 

    if(fibiter != fibHash.end()) 
     return *fibiter; 

    int fib_val; 
    if(n <= 1) 
     fib_val = 1; 
    else 
     fib_val = memoized_fib(n - 1) + memoized_fib(n - 2); 

    fibHash[n] = fib_val; 
    return fib_val; 
} 

int main() 
[..] 
+1

당신이 '의 한 켤레를 구입 하시겠습니까 원하는 무엇인가? –

답변

4

범위 해결 연산자, ::을 사용하는 것을 잊었습니다. 컴파일러는 iterator이라는 map<int, int>을 선언했다고 생각하고 따라서 fibiter을 발견하면 큰 혼란을 겪습니다. `년대 :

map<int, int>::iterator fibiter 

1

map <int, int> iterator 클래스 "지도"에서 정의 된 형식 정의입니다. 당신은 <bits/stl_map.h> 라인 139에 GCC 4.6.3과 함께 제공되는 표준 라이브러리의 구현에 그를 찾아 볼 수 있습니다, 당신은 다음 형식 정의 클래스의 정의에 속하는

typedef typename _Rep_type::iterator    iterator; 

, 당신이 "를 추가해야 : "그래서 컴파일러는 어디에서 그것을 찾을 수 있는지 알고있다.