【发布时间】:2015-06-24 16:12:41
【问题描述】:
我尝试使用 c++11 应用此解决方案(我使用的是 gcc-4.8.2)
// sort algorithm example
#include <iostream> // std::cout
#include <algorithm> // std::sort
#include <vector> // std::vector
using namespace std;
vector<size_t> sort_indexes(const vector<float> &v) {
vector<size_t> idx(v.size());
for (size_t i = 0; i != idx.size(); ++i) idx[i] = i;
sort(idx.begin(), idx.end(),
[&v](size_t i1, size_t i2) {return v[i1] < v[i2];});
return idx;
}
int main () {
std::vector<float> w(4, 0.2f);
w.push_back(0.3f);
std::vector<size_t> idx = sort_indexes(w);
// print out content:
std::cout << "ordering:";
for (std::vector<size_t>::iterator it=idx.begin(); it!=idx.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
但我得到一个编译错误说:
error: no matching function for call to ‘sort(std::vector<long unsigned int>::iterator, std::vector<long unsigned int>::iterator, sort_indexes(const std::vector<float>&)::__lambda0)’
[&v](size_t i1, size_t i2) {return v[i1] < v[i2];});
error: template argument for ‘template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)’ uses local type ‘sort_indexes(const std::vector<float>&)::__lambda0’
我会很感激任何帮助:-)
【问题讨论】:
-
Works for me。这是唯一的错误信息吗?您是否使用
-std=c++11启用了 C++11 支持? -
顺便说一句,第一个循环已经在
std::iota中预制。 -
编译器生成符号
__lambda0似乎暗示启用了C++11支持。 -
@DrewDormann 不,不是。我可以使用
-std=gnu++03或-std=c++03重现此错误。 -
非常感谢 Mike Seymour 和 stj,确实我需要添加标志 -std=c++11
标签: c++ c++11 vector lambda stl