精華區beta C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 物件中 對operator < overloding 給STL的sort() 去跑 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) GCC 4.5.0 with CodeBlocks 有問題的code: (請善用置底文標色功能) struct FUN { int up, down; double val; FUN() { up = down = val = 0; } FUN(const int& u, const int& d) { up = u, down = d, val = (double)u / (double)d; } bool operator<(const FUN& right) { return val < right.val; } }; // 這樣子不會過 compiler跳到stl_algo.h裡面 就無言了 = =a -------------------------------------------------------- bool operator<(const FUN& left,const FUN& right) { return left.val<right.val; } // 宣告在struct之外 就OK了... 不解 需要補充錯誤訊息 我再補~ 先感謝回答... -- ╮ ╮   ╭┬ ╭─┐┬╮ ◢█▍◢██◣ ─┼─┬┼─ ╰┼──┼╮ │ ╯╮│││ █▉ █▉██ ╮│ ││ ╭─┼─╮ │ └┴┘└┼ ██// █▉ ◥███ ├┼╮├┼╮ │ │ │ │ ├─┼─╮ █ █// █▉ ◥██◤ ││ │││ ┴─┼─┴ │ ╭╯├─╮ ╯│─╯│╰ ○╰─╯╰─╯ ○ ┴ ╯ ┴ ╰ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.84.162
tinlans:bool operator<(const FUN& right) const <--- 少這個 08/11 10:34
tinlans:因為你沒主程式我也懶得自己測試,但是根據經驗 99.9999% 08/11 10:34
tinlans:是少那個 const。 08/11 10:34
Yshuan:樓上是對的 可以請問加在那的意義是...? 08/11 13:09
VictorTom:印象中method加const修飾子是method內不得變更object的 08/11 13:19
VictorTom:data member內容; 就不確定compare operator是否規定一 08/11 13:20
VictorTom:定要掛上const, 想一想其實也很合理就是了:) 08/11 13:20
Yshuan:感謝V大說明... 剛正在翻PRIMER... cmp的確不該動到 08/11 13:44
hilorrk:也該貼個error的訊息...應該是this型態的問題 08/11 13:47
tinlans:演算法實作細節如果把物件以 const T & 當參數傳遞到其它 08/11 13:49
tinlans:函式,那個函式試圖比較兩個 const T &, 08/11 13:50
tinlans:如果 T::operator< 只有 non-const 版本,那一定出問題。 08/11 13:51
tinlans:實作細節不想動它,自然會以 const 的形式接它和傳遞它。 08/11 13:53
tinlans:物件以 const 形式被使用時,只有 const member function 08/11 13:55
tinlans:可被呼叫。以 non-const 形式存在時則兩種都能呼叫。 08/11 13:56
tinlans:所以如果不是經過事先規劃而是靠直覺新增 member function 08/11 13:57
tinlans:的時候,最好先假設全部都是 const,再確定要拿掉它的理由 08/11 13:58
tinlans:。用這種方法去寫 code,就不會一直發生事後以 const 形式 08/11 13:59
tinlans:傳遞並使用,才一個一個發現原來要補 const 這種情形。 08/11 13:59
tinlans:反過來你忘記拿掉 const 卻又在實作時改變 data member, 08/11 14:00
tinlans:這第一時間 compiler 就會報錯。 08/11 14:00
hilorrk:T大知識之淵博真是令小弟十分敬服啊...<(_ _)> 08/11 14:01
nowar100:Push! 08/11 14:03