2012-06-22 3 views
4

C++에서 람다 식을 사용하는 방법을 배우려고합니다. C++에서 람다 식과 auto 키워드를 사용하는 데 문제가 있습니다

나는 코드의 간단한 비트를 시도했지만 나는 오류를 컴파일 얻을 :

int main() 
{ 
    vector<int> vec; 
    for(int i = 1; i<10; i++) 
    { 
     vec.push_back(i); 
    } 
    for_each(vec.begin(),vec.end(),[](int n){cout << n << " ";}); 
    cout << endl; 
} 

오류 : 나는 또한 람다 식을 자동 변수를 만드는 시도

forEachTests.cpp:20:61: error: no matching function for call to'for_each(std::vector<int>::iterator, std::vector<int>::iterator, main()::<lambda(int)>)' 

    forEachTests.cpp:20:61: note: candidate is: 
    c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_algo.h:4373:5: note:template<class _IIter, class _Funct> _Funct std::for_each(_IIter, _IIter, _Funct) 

하지만 난의 다른 세트를 가지고 오류.

int main() 
{ 
    vector<int> vec; 
    for(int i = 1; i<10; i++) 
    { 
     vec.push_back(i); 
    } 
    auto print = [](int n){cout << n << " ";}; 
    for_each(vec.begin(),vec.end(),print); 
    cout << endl; 
} 

나에게 다음과 같은 오류가 준 :

forEachTests.cpp: In function 'int main()': 

    forEachTests.cpp:20:7: error: 'print' does not name a type 

    forEachTests.cpp:22:33: error: 'print' was not declared in this scope 

나는이 내 컴파일러에 문제가 있지만 내가 꽤 잘 모르겠습니다 있으리라 믿고있어 여기

는 코드입니다. 방금 ​​MinGW를 설치했는데 gcc 4.6.2를 사용하고있는 것으로 보입니다.

+3

이것은 컴파일러와 관련이있을 수 있습니다. 이것은 ideone에서 잘 컴파일됩니다 : http://ideone.com/gcQEG – templatetypedef

+0

컴파일 할 때'-std' 플래그를 지정 했습니까? – nhahtdh

+1

이제 자동이 -std = C++ 0x와 함께 작동하는 것처럼 보입니다. 컴파일 할 때 나에게 경고 메시지를 보내고 있지만 기본적으로 활성화되어 있다고 말했습니다. 나는 그것이 디폴트에 대해 거짓말했다고 생각한다. 첫 번째 예제 코드가 지금 작동하는지 확인하겠다. –

답변

8

새로운 C++ 11 표준에 따라 코드를 컴파일 할 때 표준 옵션 -std=c++0x (gcc 버전 4.7.0 이전) 또는 -std=c++11 (gcc 버전 4.7.0 이상)을 지정해야합니다.

+0

이 게시물이 구식 인 경우 올바른 정보로 ping을 보내거나이 게시물에 수정 사항을 제출하십시오. 나는 현재 가지고있는 모든 천건을 추적하고 유지할 수 없다. 감사. – nhahtdh

+2

@corporatewhore "y"는 "현재 연도"가 아닙니다. C++ 1y는 C++ 14가 C++ 11의 C++ 11 (및 C++ 1z는 C++의 이름입니다. 17). 그리고 적어도 1 년 전부터 "-std = C++ 14 or -std = gnu ++ 14"라는 오류 메시지가 표시되는 GCC를 업데이트해야합니다. 하지만 그 오류는 위의 질문에있는 코드가 아닌 다른 코드에 대한 것이므로 편집하면이 대답이 개선되지 않습니다. –

관련 문제