因此,这是我的代码段。
void RoutingProtocolImpl::removeAllInfinity()
{
dv.erase(std::remove_if(dv.begin(), dv.end(), hasInfCost), dv.end());
}
bool RoutingProtocolImpl::hasInfCost(RoutingProtocolImpl::dv_entry *entry)
{
if (entry->link_cost == INFINITY_COST)
{
free(entry);
return true;
}
else
{
return false;
}
}
编译时出现以下错误:
RoutingProtocolImpl.cc:368: error: argument of type bool (RoutingProtocolImpl::)(RoutingProtocolImpl::dv_entry*)' does not match
bool (RoutingProtocolImpl::)(RoutingProtocolImpl::dv_entry)'
最佳答案
问题是:bool RoutingProtocolImpl::hasInfCost(...)
是一个非静态成员函数。
它需要类的实例来调用,例如ala:obj->hasInfCost(...)
。但是,remove_if
不在乎,并尝试将其称为hasInfCost(...)
。这些是不兼容的。
您可以做的是static
:static bool RoutingProtocolImpl::hasInfCost(RoutingProtocolImpl::dv_entry *entry)
这不再需要类的实例来调用。 (它没有成员变量,没有this
指针等)。可以将其视为“正常”功能。