我在尝试编译下面的代码段时遇到以下错误(使用g ++):
error: invalid initialization of non-const reference of type
‘std::vector<pos,std::allocator<pos> >&’ from a temporary of
type ‘std::vector<pos, std::allocator<pos> >&
(*)(std::vector<pos, std::allocator<pos> >&)’
这是生成错误的代码:
struct pos{
int start;
int end;
int distance;
int size;
};
bool compare_pos(pos a, pos b)
{
if (a.distance != b.distance)
return (a.distance < b.distance);
else
return (a.size < b.size);
}
vector<pos> sort_matches(vector<pos>& matches)
{
//vector<pos> sorted_matches(matches);
vector<pos> sorted_matches();
//sort(sorted_matches.begin(), sorted_matches.end(), compare_pos);
return sort_matches;
}
真正的代码会将两条注释行取消注释,但即使是注释的示例也会给出错误。我做错了什么?
答案 0 :(得分:6)
vector<pos> sorted_matches();
这声明了一个不带任何东西并返回vector<pos>
的函数。这称为the most vexing parse。如果您不相信我,请想象变量名为f
而不是sorted_matches
:
vector<pos> f();
看起来像是一个功能,不是吗?
使用它来定义默认构造的对象:
vector<pos> sorted_matches;
return sorted_matches;