在c ++中使用lambda表达式和auto关键字时出现问题

And*_*kin 4 c++ lambda mingw auto c++11

我正在尝试学习如何在C++中使用lambda表达式.

我尝试了这个简单的代码,但是我得到了编译错误:

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;
}
Run Code Online (Sandbox Code Playgroud)

错误:

    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)
Run Code Online (Sandbox Code Playgroud)

我也尝试使lambda表达式成为一个自动变量,但我得到了一组不同的错误.

这是代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

    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
Run Code Online (Sandbox Code Playgroud)

我假设这些是我的编译器的问题,但我不太确定.我刚刚安装了MinGW,它似乎正在使用gcc4.6.2.

nha*_*tdh 8

在根据新的C++ 11标准编译代码时,您必须指定标准选项-std=c++0x(对于版本4.7.0之前的gcc)或-std=c++11(对于gcc版本4.7.0及更高版本).

  • @corporatewhore"y"不是"当前年份",C++ 1y是C++ 14在完成之前的"代号",就像C++ 0x是C++ 11(和C +)的名称一样+ 1z是C++的名称17).你应该更新你的GCC,至少在一年前,错误信息显示"-std = c ++ 14或-std = gnu ++ 14".但该错误是针对不同于上述问题的代码,您的编辑不会改善此答案. (2认同)