void sortSchedule (struct event schedule[], int n)
{
qsort(schedule, n, sizeof(struct event), compare());
}
int compare(const void * a, const void * b)
{
const struct event *evA = a;
const struct event *evB = b;
int startA = evA.start.hour*60 + evA.start.minute;
int startB = evB.start.hour*60 + evB.start.minute;
return ( startA - startB );
}
我的结构
struct tod {
int hour, minute;
};
struct event {
struct tod start, end;
};
只使用compare
代替compare()
,编译器似乎将其视为变量。
其次,我想知道我的比较功能是否正确?因为我从编译器中得到了一些错误,更具体地说是以下
Error: request for member 'start' in something not a structure or union
^此行int startA = evA.start.hour*60 + evA.start.minute;
所以我认为它认为evA不是一个结构,即使我明确地宣布它是这样的。这可能是因为我没有正确宣布它,任何帮助将不胜感激:)
答案 0 :(得分:2)
由于evA
和evB
是指针,因此您必须使用evA->member
而不是evA.member
。
答案 1 :(得分:1)
如果您使用指针执行此操作,则应使用->
来引用结构成员:
int startA = evA->start.hour*60 + evA->start.minute;
int startB = evB->start.hour*60 + evB->start.minute;
您对qsort
的致电应该是:
qsort(schedule, n, sizeof(struct event), compare);
因为第四个参数是一个指向函数的指针。