我在编写函数时遇到问题,无法将参数正确地传递给算法库的count_if。
这是我的代码。
int range = count_if(empVect.begin(), empVect.end(), empVect.InRange(200,399));
inRange函数的实现是:
bool Employee::inRange(double min, double max)
{
if (nIncome > min && nIncome < max)
return true;
return false;
}
编译器错误:类“std :: vector&gt;”没有会员“InRange”
我有一个包含2个字符串和3个双成员变量的Employee类。 我已经在我的主要硬编码矢量创建,并需要显示在一定收入范围内的员工数量。根据分配要求,仅需要使用count_if或lambda函数。 感谢。
答案 0 :(得分:2)
empVect
是std::vector<Employee>
,它没有接受任何内容的InRange
成员函数。该函数是Employee
类的成员。您需要定义一个仿函数,该仿函数将使用您传递的参数在向量的每个实例上调用该成员。一个简单的lambda会起到作用:
int range = count_if(empVect.begin(), empVect.end(), [](Employee const& e){
return e.InRange(200,399);
});
您还需要将inRange
修复为const成员函数,因为e
是对const Employee
的引用。渴望编写const正确的代码。如果成员没有修改任何成员数据,请默认将其标记为const。