2014-12-23 2 views
-8
#include<iostream> 
#include<string> 
#include<map> 
using namespace std; 
int main() 
{ 
    map<string, int> M; 
    int r = 0; 
    tr(M, it) //this line is causing trouble 
    { 
     r += it->second; 
    } 
} 

실행하려면 어떤 헤더 파일이나 전 처리기 명령을 입력해야합니까?STL에서 매크로를 사용하여 트래버스

+1

이것은 C++ 표준의 일부가 아닌 매크로입니다. 누군가 다른 사람이 고안하여 시스템에서 관련 머리글을 찾거나 코드를 작성하거나 특정 휠을 재발 명해야합니다 (조금 사각형이거나 불규칙한 모양). –

+0

어쨌든 라인이 초래할 정확한 문제는 무엇입니까? –

+0

@UlrichEckhardt : 함수'tr'을 사용할 수 없으며 호출 후에 세미콜론이 없기 때문에 구문 오류가 발생하며 'it'의 선언이 없으므로 코드에서 여러 이유로 컴파일하십시오. –

답변

2

매크로를 사용하지 마십시오. 올바르게 루프를 작성하십시오. 매크로가 될 것으로 C++ 11, 그것은 거의 간단합니다

for (map<string, int>::const_iterator it = M.begin(); it != M.end(); ++it) { 
    r += it->second; 
} 

은 당신이 정말로 다음과 같은 악한 매크로를 원하는 경우

for (auto const & pair : M) { 
    r += pair.second; 
} 

역사적를 훨씬 더 자세한 아니었다 반복기 유형을 추론하려면 C++ 11 (또는 컴파일러 관련 확장)이 필요합니다. 그리고 C++ 11을 사용한다면 범위 스타일 루프를 사용하십시오.