编译这段代码时收到错误:
void Lift::AddDestFloors(const vector<Person>& persons,
vector<int>& fplan,
int lift_pos) {
for (auto &person : persons) {
int dest_flr = person.dest_floor;
if (std::find_if(fplan.begin(), fplan.end(),
[dest_flr] (const Person& person) -> bool {
return person.dest_floor == dest_flr;
}) == fplan.end()) {
InsertToMasterFlightPlan(person.dest_floor, fplan);
}
}
}
错误讯息:
no match for call to '(Lift::AddDestFloors(const std::vector&, std::vector&, int)::__lambda0) (int&)' LiftSim line 208, external location: c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algo.h C/C++ Problem
我的环境是:
为什么我会收到此错误?
答案 0 :(得分:3)
错误意味着使用(Lift::AddDestFloors(const std::vector&, std::vector&, int)::__lambda0)
作为参数调用某些类型int
的值,但不能使用int
值调用该对象。 (例如,如果您的lambda采用bool
,则无法使用int
作为参数调用它。
代码中唯一的lambda是find_if
的参数:[dest_flr](const Person& person)->bool {return person.dest_floor == dest_flr;})
您在find_if
上致电fplan
。 fplan
的元素类型为int
,因此lambda也应该采用int
,而不是Person
。