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

C++ C++;函数指针;没有匹配函数,c++,function-pointers,C++,Function Pointers,所以我有一个作业要求我使用随机快速排序,我发现使用函数指针有问题 排序功能位于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)); 模板 无效rqs_与_范围(标准::向量和向量,int p,int q, int

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

排序功能位于
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));
模板
无效rqs_与_范围(标准::向量和向量,int p,int q,
int(*cmp)(项目类型,项目类型));
然后在我的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);
   }
}
类表{
构造器。。。。
向量*holder;//表
int compare_str(向量*a,向量*b){
返回a->at(compare\u column)at(compare\u column)?-1:a->at(compare\u column)==b->at(compare\u column)?0:1;
}
无效rqs{
rqs_与_范围((*holder)、1、int(holder->size()-1)和Table::compare_str);
}
}

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

是的,这是一个问题


您可以将其设置为自由函数或静态成员。否则,您有一个影响函数签名的隐藏
参数。

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

template <typename Item_Type, typename Compare>
void rqs_with_range(std::vector<Item_Type> &vec, int p, int q, Compare comp);
模板
无效RQ_和_范围(标准::向量和向量,整数p,整数q,比较comp);

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

成员函数不是函数,指向成员函数的指针不是函数指针。搜索这个网站,因为这个问题已经被问过一百万次了。