看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題:自定義的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
loveme00835:原本的程式碼可以 po 一下嗎 ? 07/01 15:47
※ 編輯: jehovah 來自: 210.69.128.66 (07/01 15:56)
jehovah:補上了原程式碼, 有勞幫忙看看..幫小弟解惑^^ 07/01 15:57
loveme00835:用VS2010 可以編過的說 0.0, Dev C++ 還在看 07/01 16:17
loveme00835:把 operator << 的 header 改成 const Date& 就可以了 07/01 16:19
loveme00835:原因應該是暫時物件被解構的關係 07/01 16:20
jehovah:發現temp的建立不會呼叫ctor..但解構會呼叫dtor 07/01 17:00
jehovah:且是印出cout<<d++ 後才呼叫temp的dtor @@" 07/01 17:02
loveme00835:會呼叫ctor, 在這時候 temp 跟回傳的物件是同一個, 屬 07/01 21:08
loveme00835:於暫時物件, 這時候可以用const reference接起來讓他 07/01 21:11
loveme00835:晚一點解構掉 07/01 21:12
coldstars:const Date&才可以 這是右值不能放進non-const的問題 07/01 22:07
coldstars:至於temp不會呼叫ctor可能是被RVO吃掉了... 07/01 22:07
loveme00835:打錯, 是reference to const 07/01 22:28
jehovah:謝謝解答! 07/02 08:47