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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!