C++函数指针;没有匹配功能
C++ function pointer; no matching function
所以我有一个任务要求我使用随机快速排序,我发现使用函数指针有问题。
排序功能在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解决问题,但这没有意义。
相关文章:
- C++:函数外部的超时功能
- 我在 C++ 中创建了一个函数来递归反转字符串,但是之后如何使功能打印一个 endl?
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 当我链接两个静态C++库时,我可以在两个主函数库中有两个主要功能吗?
- 具有C++迭代器参数的多功能函数
- 错误:调用'strcmp'没有匹配函数(尝试设置显示用户信息功能)
- 我有模板功能.通过使用函数std::for_each,用这个容器中的最大数字替换每个正数
- 是否有一个Windows驱动程序函数可以执行Windows文件api SeFileAttributes的等效功能
- 自定义 {fmt} 格式化函数,具有编译时格式字符串检查功能
- 如何在带有初始值设定项的构造函数中使用 vprintf/cstdarg 功能?
- =删除用户定义的成员功能,除了构造函数,分配运算符C 11
- 如何使用结构内的功能指针调用私有函数
- C 函数调用包装器包含类成员功能作为模板参数
- 您如何在与打开窗口的功能的不同函数中使用Draw函数
- 当使用嵌套类功能时,使用非静态数据成员的使用无效,但是当函数未固定时可以
- 如果我具有调用其其他实例之一的超载函数,它是否被认为是递归功能
- 使用具有返回功能的函数
- 如何在不接触函数本身的情况下暂停和恢复 C++11 std::thread 的功能
- 将带捕获功能的 lambda 传递给模板化函数
- 获取模板功能函数返回类型的功能类型