上述代码中cmp函数无法通过devc++编译,报 'SEG' undeclared 和 expected expression before ')' token 错误,请分析原因并改正
时间: 2024-10-08 10:24:52 浏览: 45
在上述代码中,`cmp` 函数未能通过 Dev-C++ 编译,主要是由于以下几个原因:
1. **`SEG` 声明错误**:在 `cmp` 函数内,你需要先声明 `SEG` 结构体,这样才能在函数内部访问其成员。在 `main()` 函数外添加 `struct SEG` 的全局声明即可,例如放在变量 `seg` 之前:
```c
struct SEG seg[100000]; // 将这行移到变量 p 之前
...
```
2. **函数参数错误**:在 `qsort` 调用中,`cmp` 函数接受的是 `void *x` 和 `void *y` 作为参数,而非直接指向 `SEG` 结构体的指针。所以应该去掉 `*(SEG *)`,即 `return (p->b > q->b) ? 1 : -1;` 或者 `return p->b > q->b ? 1 : -1;`。
纠正后的 `cmp` 函数看起来像这样:
```c
int cmp(const void *x, const void *y) {
struct SEG *px = (struct SEG *)x;
struct SEG *py = (struct SEG *)y;
return px->b > py->b ? 1 : -1;
}
```
现在这个 `cmp` 函数应该能在 Dev-C++ 中成功编译了。记得在主函数中也更新 `p` 的类型为 `struct SEG *`。
阅读全文