作者UNARYvvv (有趣生活)
看板C_and_CPP
标题Re: [问题] c++ 的物件使用一问
时间Thu Feb 9 02:31:38 2006
※ 引述《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