因此,这是我的代码段。


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 matchbool (RoutingProtocolImpl::)(RoutingProtocolImpl::dv_entry)'

最佳答案

问题是:bool RoutingProtocolImpl::hasInfCost(...)是一个非静态成员函数。

它需要类的实例来调用,例如ala:obj->hasInfCost(...)。但是,remove_if不在乎,并尝试将其称为hasInfCost(...)。这些是不兼容的。

您可以做的是static:
static bool RoutingProtocolImpl::hasInfCost(RoutingProtocolImpl::dv_entry *entry)这不再需要类的实例来调用。 (它没有成员变量,没有this指针等)。可以将其视为“正常”功能。

07-26 00:04