我正在尝试在我的time_to_active <= 0
类上创建一个成员方法以进行排序。我在类中键入了两个函数指针,一个用于通用排序方法,另一个用于比较器。我在浏览错误时很难确定我所说的方式到底出了什么问题。我希望我提供了足够的信息,但这就是我所得到的。
我得到的错误:
array
我在这里定义我的main.cpp: In function ‘int main(int, char**)’:
main.cpp:222:67: error: no matching function for call to ‘array<int>::sort(<unresolved overloaded function type>, <unresolved overloaded function type>)’
sort(wrap_insertion_sort_recursive<int>, custom_comparator<int>);
^
main.cpp:55:6: note: candidate: void array<T>::sort(array<T>::p_sort_func, array<T>::p_comparator_func) [with T = int; array<T>::p_sort_func = void (*)(array<int>&, bool (*)(int, int)); array<T>::p_comparator_func = bool (*)(int, int)]
void array<T>::sort(array<T>::p_sort_func sort_func,
^~~~~~~~
main.cpp:55:6: note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘array<int>::p_sort_func {aka void (*)(array<int>&, bool (*)(int, int))}’
:
typedefs
我的排序实现:
template <typename T>
class array {
public:
typedef bool (*p_comparator_func)(T a, T b);
typedef void (*p_sort_func)(class array<T> &array, p_comparator_func);
...
void sort(array::p_sort_func sort_func,
array::p_comparator_func comparator_func);
...
}
我要传递的排序函数:
template <typename T>
void array<T>::sort(array<T>::p_sort_func sort_func,
array<T>::p_comparator_func comparator_func)
{
if(comparator_func == nullptr) {
comparator_func = this->default_comparator;
}
if(sort_func == nullptr) {
sort_func = this->default_sort;
}
sort_func(*this, comparator_func);
}
我的自定义比较器:
template <typename T>
void wrap_insertion_sort_recursive(class array<T> &array,
class array<T>::p_comparator_func comparator)
{
insertion_sort_recursive(array, array.get_capacity(), comparator);
}
我在main中调用它的地方:
template <typename T>
bool custom_comparator(T a, T b)
{
return a < b;
}
答案 0 :(得分:0)
具体问题在于:
template <typename T>
void wrap_insertion_sort_recursive(class array<T> &array,
class array<T>::p_comparator_func comparator)
{
insertion_sort_recursive(array, array.get_capacity(), comparator);
}
我应该使用class
而不是typename
,如这篇不错的文章所述,有关typename
here。
因此固定版本为:
template <typename T>
void wrap_insertion_sort_recursive(class array<T> &array,
typename array<T>::p_comparator_func comparator)
{
insertion_sort_recursive(array, array.get_capacity(), comparator);
}