-1

findNthテンプレート化された関数でヘルパー関数を使用するのに問題がありましたquicksort。一致する関数呼び出しがないかのように、「宣言されていない識別子 '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控除対象外であり、提供されない(そして未使用のBTW)という問題がまだあります。だからあなたを次のようなものに変換してください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 に答える