4

C++ でラムダ式を使用する方法を学習しようとしています。

この簡単なコードを試してみましたが、コンパイル エラーが発生します。

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 をインストールしたところ、gcc4.6.2 を使用しているようです。

4

1 に答える 1

8

新しい C++11 標準でコードをコンパイルする場合は、標準オプション-std=c++0x(バージョン 4.7.0 より前の gcc の場合) または(gcc バージョン 4.7.0 以降の場合) を指定する必要があります。-std=c++11

于 2012-06-22T02:43:16.447 に答える