一个简单的C++类型匹配问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 07:01:10
代码如下:
#include <stdio.h>
#include <stdlib.h>

struct c
{
int x;
int y;
int ord;
}d[100];

int cmp(const struct c *a, const struct c *b)
{
if ((*a).x == (*b).x)
return (*a).y - (*b).y;
else
return (*a).x - (*b).x;
}

int main(void)
{
int i, j, n, max;

while (scanf("%d", &n), n)
{
for (max = i = 0; i < n; i++)
{
scanf("%d%d", &d[i].x, &d[i].y);
d[i].ord = 1;
}
qsort(d, n, sizeof(struct c), cmp);
d[n-1].ord = 1;
for (i = n - 2; i >= 0; i--)
{
for (j = i + 1; j < n; j++)
{
if (d[i].y <= d[j].x && d[i].ord < d[j].ord + 1)
d[i].ord = d[j].ord + 1;
}

要编译通过。
typedef int (*FUNC_CMP)(const void *,const void *);
qsort(d, n, sizeof(struct c), FUNC_CMP(cmp));

太长了……有没有加分啊

qsort的函数原型:
void qsort(void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
你的代码里是const struct c *,应该是const void *
你用数组试试
另外 参考 http://baike.baidu.com/view/982231.html?wtp=tt