-1

我一直无法让我的findNth模板化函数使用我的辅助函数quicksort。我不断收到“使用未声明的标识符'快速排序'”,就好像没有匹配的函数调用一样。知道发生了什么吗?

#ifndef ORDER
#define ORDER

#include <vector>
#include <utility>

template<typename T,typename C>
T &findNth(std::vector<T> &data,int index,const C &comp){

    quicksort(&data, 0, data.size()-1);

    return data[index];
}

这是我的快速排序功能。

template<typename T,typename C>
void quicksort(std::vector<T> &data, int lo, int hi){
    if(lo < hi){
        int p = partition(data, lo, hi);
        quicksort(data, lo, p - 1);
        quicksort(data, p + 1, hi);
    }
}

所有其他快速排序辅助函数都已编写完毕,但据我所知并没有引起任何问题。

4

2 回答 2

0

一旦您修复了订单,您仍然有一个问题C是不可扣除且未提供(以及未使用的顺便说一句)。因此,将您的转换quicksort为:

template<typename T>
void quicksort(std::vector<T> &data, int lo, int hi);

或者:

template<typename T, typename C>
void quicksort(std::vector<T> &data, int lo, int hi, const C&c);
于 2015-01-19T08:20:37.140 回答
0

您是否在 findNth 之前声明了您的快速排序函数?:

#ifndef ORDER
#define ORDER

template<typename T, typename C>
void quicksort(std::vector<T> &data, int lo, int hi) {
    // your code here
}

template<typename T,typename C>
T &findNth(std::vector<T> &data,int index,const C &comp) {
    // your code here
}

否则,编译器在您调用它时不知道快速排序。

于 2015-01-19T08:26:36.390 回答