多个模板化函数交互
Multiple templated functions interact
我一直无法让我的 findNth
模板函数使用我的辅助函数 quicksort
。我一直收到 "Use of undeclared identifier '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);
}
}
所有其他快速排序辅助函数都已编写,但据我所知没有造成任何问题。
一旦你确定了订单,你仍然有一个问题 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);
您是否在 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
}
否则,当你调用它时编译器不知道快速排序。
我一直无法让我的 findNth
模板函数使用我的辅助函数 quicksort
。我一直收到 "Use of undeclared identifier '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);
}
}
所有其他快速排序辅助函数都已编写,但据我所知没有造成任何问题。
一旦你确定了订单,你仍然有一个问题 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);
您是否在 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
}
否则,当你调用它时编译器不知道快速排序。