[問題] c++ 的物件使用一問
※ [本文轉錄自 Programming 看板]
請教各位程式設計的高手們,
我寫c++的時候,遇到物件使用上的問題,
以下是我的code以及vc6與gnu c++的compile之錯誤訊息
class src
{
public:
src()
{
}
};
class ic: public src
{
public:
ic(src& s)
{
}
};
class mpd: public src
{
public:
mpd()
{
}
mpd(src& a)
{
}
mpd(src& a, int b)
{
}
};
void fun()
{
ic a(src());
ic b(mpd(a));
ic c(b);
}
int main(int argc, char* argv[])
{
ic a(src());
ic b(mpd(a, 1));
ic c(b);
return 0;
}
以白話來描述之,則是
我這段code一共有3個角色
src: 物件來源
mpd: 物件來源的一種,繼承於src
ic: 物件內容,本身也可為物件來源
其中,物件內容(ic)可由物件來源(src)建構
ic::ic(src& s)
當然,mpd也是src的一種,因此物件內容
也可以由mpd來建構,例如
mpd m;
ic a(m); // works well
亦可由ic本身來建構(since ic extends src)
mpd m;
ic a(m);
ic b(a); // still works well
mpd可由兩種方式建構,
一種是傳入一個src,另一種是傳入一個src和一個整數
mpd::mpd(src& a);
mpd::mpd(src& a, int b);
因此以下的code可以正確編譯
src s;
mpd m(s);
ic a(m);
ic b(a);
但是重點在於,我將上述的code
轉換成
src s;
ic a(mpd(s));
ic b(a);
的時候卻會出現以下的錯誤訊息:
error C2664: '__thiscall ic::ic(class src &)' :
cannot convert parameter 1 from 'class ic (class mpd)' to 'class src &'
Context does not allow for disambiguation of overloaded function
以gnu c++的compiler則出現
a.cpp: In function `int main(int, char**)':
a.cpp:28: no matching function for call to `ic::ic(ic (&)(mpd))'
a.cpp:10: candidates are: ic::ic(const ic&)
a.cpp:13: ic::ic(src&)
但是若換成mpd當中的傳入兩個參數的constructor卻能夠compile
也就是
src s;
ic a(mpd(s, 1));
ic b(a);
我覺得相當困惑,為何會有這樣的現象
麻煩各位高手若可以的話,
請提出您的看法,感激不盡!!
mips 敬上
※ 編輯: mips 來自: 140.113.241.36 (02/08 19:58)
推
02/08 21:45, , 1F
02/08 21:45, 1F
→
02/08 21:46, , 2F
02/08 21:46, 2F
推
02/09 02:32, , 3F
02/09 02:32, 3F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章