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