2 qq 33298527 qq_33298527 于 2016.05.05 00:00 提问

新人求教,C++用模板写qsort所需的排序函数以实现对所有类型的排序

我写了个模板类,为了使cmp能对任意类型的数据来排序,但是却报错:错误 1 error C3867: “A::cmp”: 函数调用缺少参数列表;请使用“&A::cmp”创建指向成员的指针
求教这是为什么 该怎么改?

这是我的代码;

#include
#include
using namespace std;
template
class A{
public:
void up(T aa, int size){
qsort(aa, size, sizeof(*aa), cmp);
for (int i = 0; i < size; i++) cout << aa[i] << endl;
}
int cmp(const void *a, const void *b){
if (
(T*)a > (T)b) return 1;
else return -1;
}
};
int main(){
A a;
int i[5] = { -1, 0, 6, 3, 0 };
a.up(i, 5);
system("pause");
}

4个回答

caozhy
caozhy   Ds   Rxr 2016.05.05 00:05

int cmp(const void *a, const void *b)
这个不能是成员函数,放在类外面

asd001110
asd001110   2016.05.05 01:11

既然你传的是数组,那么你就要把模板类参数设为数组,这样才能正确解析,以下代码已经经过编译,希望可以帮到你
template
class A
{
public:
void up(T aa, int size)
{
//qsort(aa, size, sizeof(*aa), cmp);
for (int i = 0; i < size; i++)
cout << aa[i] << endl;
}
int cmp(const void a, const void *b)
{
if ((T
)a > (T)b) return 1;
else return -1;
}
};
int main()
{
A a;
int i[5] = { -1, 0, 6, 3, 0 };
a.up(i, 5);
system("pause");
return 0;
}

asd001110
asd001110   2016.05.05 01:17

template
class A
{
public:
void up(T aa, int size)
{
//qsort(aa, size, sizeof(*aa), cmp);
for (int i = 0; i < size; i++)
cout << aa[i] << endl;
}
int cmp(const void a, const void *b)
{
if ((T
)a > (T)b) return 1;
else return -1;
}
};
int main()
{
A a;
int i[5] = { -1, 0, 6, 3, 0 };
a.up(i, 5);
system("pause");
return 0;
}


asd001110
asd001110   2016.05.05 01:20

实在抱歉,粘上的代码少了东西,我截了图传上来的是通过编译的
图片说明](https://img-ask.csdn.net/upload/201605/05/1462382411_665779.png)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
参考C语言的qsort函数实现一个一个能对任意数据类型(包括结构体)的数组进行排序的函数(里面用的不是快速排序)
#include #include #include /* 要求: 参考C语言的qsort函数实现一个一个能对任意数据类型(包括结构体)的数组进行排序的函数 */ void mysort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *)) {     //base 为要排序
qsort对二维数组的排序
qsort对二维数组排序与对以为数组排序是一样的 几乎没有什么差别,而且后来想想定义一个二维数 组所占的空间与定义一个机构体所占的空间是一样 的,所以没有必要用多维数组,直接用结构体数组 就行。 #include #include #include #incl
用Qsort排序链表的使用实例记录
要排序的是链表,记得上次排序结构体的时候本身创建的就是结构体数组所以空间连续可排。 但是链表是离散的,不能直接Qsort。 所以分配一个临时空间用来存储地址,然后排序地址再重新建立。 之所以记录在这里是因为其中写cmp函数的时候,发现形参怎么写还是有些讲究的,于是放在这里以方便查看! //--------------------------------struct部分 typ
字符串排序(qsort函数用法小结)
首先说一下字符串的排序: 代码(1): #include #include #include #include using namespace std; #define MAXN 1000 #define N 100 int cmp(const void *a,const void *b) { return strcmp((char*)a,(char*)b);
qsort结构体排序 (初学者必知)
重点: qsort函数包含在的头文件里,strcmp包含在的头文件里 首先,排序的方法有很多。对于我们这些初学者来说,可以多懂一些、多学一些来懂一些其中的思想。其实只要完全融会贯通一个就够用了;我认为这个就是qsort排序,因为时间虽然比不上快排,但是计较稳定。其可以对数字,字母,结构体等等都可以排序。 1:数字的qsort排序 a:从大到小排序 #includ
使用qsort对二维数组李的某一列元素进行排序
/* 这是一个测试qsort的函数,主要是针对一个二维数组,对其中的某一列进行 排序,之后按照这一列的排序重排整个二维数组 */ #include #include /* comp 作为qsort的一个参数,其定义了一个数组按那个元素排序 */ int comp(const void *a,const void *b) { if(((double*)a)[1]<((doub
用qsort对二维数组进行排序
对于malloc动态申请的多维数组(指针数组)以一个例子解析: 要求—— 打算操作一个数组,数组的每个元素是一个指针,指向2个元素的数组。元素的大小关系为先比较第一个元素,第一个元素相同比较第二个元素。首先,通过malloc对指针数组进行分配: 先分配一个指向元素为int 的一维数组,所以数组类型为int *; 然后,针对每一个数组里的int *型指针,分配一个一维数组,数组类型为in
qsort()与结构体相结合
题目描述: 用一维数组存储学号和成绩,然后,按成绩排序输出。 输入: 输入第一行包括一个整数N(1 接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。 输出: 按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。 如果学生的成绩相同,则按照学号的大小进行从小到大排序。 样例输入: 3 1 90 2 87 3 92 样例输
sort/qsort对字符串排序
转自:http://blog.sina.com.cn/s/blog_9159c90501016xer.html 按照字典序排序: c++版: string s[21];  for(int i=0;i >s[i];  sort(s,s+20);不用写cmp函数,string 类提供了operator。但这只是按照字典序排序的,按长度排序如下: 按长度排序: c++版: #in
字符串数组qsort排序
字符串数组qsort排序