-1

以下のコードは、変換してコンパイルできるかどうかを確認するために行った簡単なテストです。コードはコンパイルされ、この回答をvisualstudioに正しく出力します。

firsta
secondb
thirdc

しかし、g ++ main.cpp -o mainを使用すると、次のエラーが発生します。

main.cpp: In function 'int main()':
main.cpp:19:106: warning: lambda expressions only available with -std=c++0x or -std=gnu++0x [enabled by default]
main.cpp:19:107: error: no matching function for call to 'transform(std::vector<std::basic_string<char> >::iterator, std::vector<std::basic_string<char> >::iterator, std::vector<std::basic_string<char> >::iterator, std::vector<std::basic_string<char> >::iterator, main()::<lambda(const string&, const string&)>)'
main.cpp:19:107: note: candidates are:
/usr/include/c++/4.6/bits/stl_algo.h:4871:5: note: template<class _IIter, class _OIter, class _UnaryOperation> _OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation)
/usr/include/c++/4.6/bits/stl_algo.h:4907:5: note: template<class _IIter1, class _IIter2, class _OIter, class _BinaryOperation> _OIter std::transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation)

#include <string>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iterator>
#include <iostream>

using namespace std;

int main()
{
    vector<string> v, v2, v3;

    v.push_back("first"); v.push_back("second"); v.push_back("third");
    v2.push_back("a"); v2.push_back("b"); v2.push_back("c");
    v3.resize(3);


    transform(v.begin(), v.end(), v2.begin(), v3.begin(), [](const string &a, const string &b){return a + b;});
    copy(v3.begin(), v3.end(), ostream_iterator<string>(cout, "\n"));
}
4

2 に答える 2

3

この警告をもう一度お読みください。

main.cpp:19:106: warning: lambda expressions only available with -std=c++0x or -std=gnu++0x [enabled by default]

-std=c++0xGCCでC++11機能を使用するには、 GCC 4.6以下、および-std=c++11バージョン4.7以降を使用している場合はオプションを使用する必要があります。

于 2013-02-16T16:19:17.703 に答える
0

コンパイラメッセージの内容(読んでください):

警告:ラムダ式は-std = c++0xまたは-std=gnu++0xでのみ使用可能です

-std=c++0xこれは、フラグを追加した後、正常にコンパイルされます。

于 2013-02-16T16:20:11.513 に答える