-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]

要在 GCC 中使用 C++11 功能,您需要在-std=c++0x使用 GCC 4.6 或更低-std=c++11版本以及 4.7 或更高版本时使用该选项。

于 2013-02-16T16:19:17.703 回答
0

正是编译器消息所说的(阅读它):

警告:lambda 表达式仅适用于 -std=c++0x 或 -std=gnu++0x

-std=c++0x添加标志后,这对我来说编译得很好。

于 2013-02-16T16:20:11.513 回答