Re: [問題] c++ 的物件使用一問
※ 引述《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
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章