Re: [問題] c++ 的物件使用一問

看板C_and_CPP (C/C++)作者 (有趣生活)時間19年前 (2006/02/09 02:12), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《mips (天行者路克好帥)》之銘言: : class ic: public src : { : public: : ic(src& s) : { : } : }; === : src s; : ic a(mpd(s)); : ic b(a); : 的時候卻會出現以下的錯誤訊息: === : 但是若換成mpd當中的傳入兩個參數的constructor卻能夠compile : 也就是 : src s; : ic a(mpd(s, 1)); : ic b(a); 不會吧..我改成這種兩個參數版本的 constructor,也照樣編譯不過 g++ 錯誤訊息也差不多是那樣 (no matching function) ======================== 你的問題其實只有一個關鍵: ic::ic(src& s) 接受的是 non-const reference 你傳暫時物件進去,那就等於傳 const 物件了,這樣當然會錯囉 否則你可以試試把 ic(src& s) 參數改成 const src &s 看看 就可以運作了 函式的 reference 參數 如果沒加 const,就表示接收進來的物件可能被修改 所以如果有傳入暫時物件的可能,一定要加 const ========== 可以試試這個(省略header file了) 比較看看 show() 的參數差異造成的結果: void show(string &s){ // using non-const reference // void show(const string &s){ // using const reference cout<<s<<endl; } int main(){ show( string("123") ); /* 雖然 string constructor 可轉 const char* 我還是直接寫出 string 出來比較明確 */ return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.70.137.117
文章代碼(AID): #13wZH_ro (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #13wZH_ro (C_and_CPP)