[問題] 多載<<無法印出後置++的物件

看板C_and_CPP (C/C++)作者 (Lucius)時間16年前 (2010/07/01 15:39), 編輯推噓1(1013)
留言14則, 3人參與, 最新討論串1/1
遇到的問題:自定義的Date物件d, 我用多載做d++將日期加一 並用多載的<<做 cout<<d++ 但過不了編譯器 程式跑出來的錯誤結果:無法編譯 http://paste.plurk.com/show/275825/ 這是錯誤訊息 開發平台:Dev-C++ 有問題的code:(class Date中有private成員day) 多載++: Date Date::operator++(int) { Date temp = *this; day++; return temp; } 多載<<: ostream& operator<<(ostream& output, Date& d) { output<<d.day; return output; } .h 的code: http://paste.plurk.com/show/275831 .cpp的code: http://paste.plurk.com/show/275830 (++, <<, 相關的函式在最下方) main : http://paste.plurk.com/show/275832 補充說明:這是書本的範例, 我沒有更動程式碼 實在看不出來有什麼問題..煩請幫我抓抓看問題在哪裡:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.128.66

07/01 15:47, , 1F
原本的程式碼可以 po 一下嗎 ?
07/01 15:47, 1F
※ 編輯: jehovah 來自: 210.69.128.66 (07/01 15:56)

07/01 15:57, , 2F
補上了原程式碼, 有勞幫忙看看..幫小弟解惑^^
07/01 15:57, 2F

07/01 16:17, , 3F
用VS2010 可以編過的說 0.0, Dev C++ 還在看
07/01 16:17, 3F

07/01 16:19, , 4F
把 operator << 的 header 改成 const Date& 就可以了
07/01 16:19, 4F

07/01 16:20, , 5F
原因應該是暫時物件被解構的關係
07/01 16:20, 5F

07/01 17:00, , 6F
發現temp的建立不會呼叫ctor..但解構會呼叫dtor
07/01 17:00, 6F

07/01 17:02, , 7F
且是印出cout<<d++ 後才呼叫temp的dtor @@"
07/01 17:02, 7F

07/01 21:08, , 8F
會呼叫ctor, 在這時候 temp 跟回傳的物件是同一個, 屬
07/01 21:08, 8F

07/01 21:11, , 9F
於暫時物件, 這時候可以用const reference接起來讓他
07/01 21:11, 9F

07/01 21:12, , 10F
晚一點解構掉
07/01 21:12, 10F

07/01 22:07, , 11F
const Date&才可以 這是右值不能放進non-const的問題
07/01 22:07, 11F

07/01 22:07, , 12F
至於temp不會呼叫ctor可能是被RVO吃掉了...
07/01 22:07, 12F

07/01 22:28, , 13F
打錯, 是reference to const
07/01 22:28, 13F

07/02 08:47, , 14F
謝謝解答!
07/02 08:47, 14F
文章代碼(AID): #1CB4OmPi (C_and_CPP)
文章代碼(AID): #1CB4OmPi (C_and_CPP)