for_each和lambda上的win32-g ++错误

时间:2014-05-14 09:18:42

标签: foreach lambda g++

我知道这个主题经常出现在stackoverflow上,但这里的情况有所不同: 以下代码使用MsVC ++ 2013进行编译,但不使用win32-g ++进行编译。有没有办法让它适用于两个编译器?

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;



int main()
{
    vector<int>my_vector;
    for(int i=0; i < 6; i++)
        my_vector.push_back(i);
    for_each( my_vector.begin(), my_vector.end(), [ ](int  n){cout<<n;});
    return 0;
}

报告的错误是

||=== stdtest, Debug ===|
D:\dev\CplusPlus\stdtest\main.cpp||In function 'int main()':|
D:\dev\CplusPlus\stdtest\main.cpp|13|warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]|
D:\dev\CplusPlus\stdtest\main.cpp|13|error: no matching function for call to 'for_each(std::vector<int>::iterator, std::vector<int>::iterator, main()::<lambda(int)>)'|
D:\dev\CplusPlus\stdtest\main.cpp|13|note: candidate is:|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_algo.h|4436|note: template<class _IIter, class _Funct> _Funct std::for_each(_IIter, _IIter, _Funct)|
D:\dev\CplusPlus\stdtest\main.cpp|13|error: template argument for 'template<class _IIter, class _Funct> _Funct std::for_each(_IIter, _IIter, _Funct)' uses local type 'main()::<lambda(int)>'|
D:\dev\CplusPlus\stdtest\main.cpp|13|error:   trying to instantiate 'template<class _IIter, class _Funct> _Funct std::for_each(_IIter, _IIter, _Funct)'|
||=== Build finished: 3 errors, 1 warnings (0 minutes, 0 seconds) ===|

我应该补充一点,我假设打开了C ++ 11标准,因为&#34;默认情况下已启用&#34;。如果我错了,我很难找到如何从Code :: Blocks中更改编译器开关。

1 个答案:

答案 0 :(得分:0)

事实证明,我被-sdd = C ++ 11默认启用#34;这句话所误导。 我最终找到了一种方法来启用项目&gt;构建选项&gt;编译器设置 然后我点击了复选框&#34;让g ++遵循c ++ 11 ISO C ++语言设置&#34;复选框。

对于使用QtCreator的人,请将以下行添加到项目文件中: QMAKE_CXXFLAGS + = -std = c ++ 11