C++函数指针;没有匹配功能

C++ function pointer; no matching function

本文关键字:功能 函数 指针 C++      更新时间:2023-10-16

所以我有一个任务要求我使用随机快速排序,我发现使用函数指针有问题。

排序功能在rqs.cpp:中

template <typename Item_Type>
void rqs_with_range(std::vector<Item_Type> &vec, int p, int q,
                int (*cmp)(Item_Type, Item_Type));

然后在我的cpp文件中,我有这样的东西:

class Table{
   constructor....
   vector< vector<string>* >* holder; // table 
   int compare_str(vector<string>* a, vector<string>* b) {
      return a->at(compare_column) < b->at(compare_column) ? -1 :a->at(compare_column) == b->at(compare_column) ? 0 : 1;
  }
   void rqs{
      rqs_with_range( (*holder) , 1, int(holder->size()-1), &Table::compare_str);
   }
}

编译器说我在函数rqs中有错误,没有匹配的函数。我的比较函数是表的成员函数,这会是问题的原因吗?

是的,这是个问题。

您可以使它成为一个自由函数,也可以使其成为一个静态成员。否则,会有一个影响函数签名的隐藏this参数。

如果您已经在使用模板,那么请不要使用函数指针。改为使用函数对象:

template <typename Item_Type, typename Compare>
void rqs_with_range(std::vector<Item_Type> &vec, int p, int q, Compare comp);

接下来的问题是:使compare_str不是一个非静态成员函数,即Table类之外的函数。使用修改后的rqs_With_range,您也可以使用std::mem_fun或std::bind解决问题,但这没有意义。

相关文章: