Re: [课程] 单班计程作业 15

楼主: radar735 (雷达)   2011-01-05 20:19:15
※ 引述《realturner (rt)》之铭言:
: 题目述叙有更新,请同学去查看
: 另外最后一笔测资因为档案很多(~30000)
: 如果用 strcpy 会因为空间不够而无法执行
: 产生“使用到不该用的内存”的错误
: 其实只要记指标就好了
: 同样地,用完一个档记得就要关
: 因为系统会限制同时能开的档案数
: 最后,如果你都做了,而且用了 qsort 还是超时的话
: 请多丢几次,第二次通常会比较快
各位强者好 在下做这次的homework时碰上一个问题
虽然已经靠估狗解决 却还是不知道为什么会这样 因此上来向各位请教
先说我是用 DEV C
我本来的compare函式长这样:
int compare(void *data1,void *data2)
在编译的时候 出现如下的错误讯息:
passing argument 4 of ‘qsort’ from incompatible pointer type
我为此百思不得其解 因为这和老师讲义上面的形式明明一模一样
后来辜狗了一下 看到一堆英文中 好像说要加const
于是我就把函式改成这个样子:
int compare(const void *data1,const void *data2)
然后就可以过了......
但是我完全不知道为什么要加......
我把老师讲义的程式复制到DEV C
他没有加const也照样可以编译可以跑
但是我自己的就得加
请问那个错误讯息和const的关系到底是什么?
感谢各位大大~
作者: skyly (skyly)   2011-01-05 20:22:00
你可以 po 一下你的 compare function 吗?你也可以寄站内信给我 @@
作者: pp31630 (动手)   2011-01-05 20:33:00
我也是遇到同样的问题耶!!
作者: wctaiwan (wctaiwan)   2011-01-05 20:38:00
+1,可以compile / 跑就是了
作者: skyly (skyly)   2011-01-05 20:47:00
是说你们 compile 的时候要存成 .c 用 gcc compile而不是存成 .cpp (Dev-C++ 默认) 然后用 g++ compile理论上没加 const 的话用 g++ (当然)不会过,用 gcc 则是可以通过编译 (不过会显示 warning)
楼主: radar735 (雷达)   2011-01-05 20:59:00
感谢强者解惑!
作者: skyly (skyly)   2011-01-05 21:05:00
warning 的原因大家要注意到 qsort 的第四个参数 (也就是argument 4) 是 int (*)(const void*, const void*)而非 int (*)(void*, void*) 这样子大家应该可以推论出为什么会有 warning 了.
作者: pp31630 (动手)   2011-01-05 22:37:00
感谢强者!!终于懂了
作者: bill8124 (夜行性动物)   2011-01-06 00:29:00
我自己的理解方式是:qsort不希望compare函式更动阵列内容取而代之,以回传值告诉qsort是否要交换如有解读错误请指正

Links booklink

Contact Us: admin [ a t ] ucptt.com