qq_33298527
2016-05-04 16:00
采纳率: 0%
浏览 1.6k

新人求教,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条回答 默认 最新

  • threenewbee 2016-05-04 16:05

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

    评论
    解决 无用
    打赏 举报
  • asd001110 2016-05-04 17: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 2016-05-04 17: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 2016-05-04 17:20

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题