作者aquatear (米蟲)
看板C_and_CPP
標題[問題] 一個建構子的問題
時間Mon Jun 8 15:46:05 2009
寫了一個類別
幫她寫了兩個建構函式
class CWin
{
public:
CWin(int i=0,int w=0,int h=0):id(i),width(w),height(h)
{
}
CWin(int w, int h):width(w),height(h)
{
}
};
class CTextWin : public CWin
{
public:
CTextWin(int w, int h) : CWin(w,h)
{
}
};
寫了個 CTextWin 繼承 CWin
並寫一個 CTextWin 的建構函式, 此建構函式會呼叫到 CWin(int w, int h)
問題來了 , 不知道哪裡有寫錯
在 Visual C++ 裡編譯,出現了錯誤
error C2668: 'CWin::CWin' : ambiguous call to overloaded function
.\Ctest.cpp(28): could be 'CWin::CWin(int,int)'
.\Ctest.cpp(22): or 'CWin::CWin(int,int,int)'
有人知道錯在哪嗎 ?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.118.243
1F:推 realmojo:錯誤訊息寫的滿清楚的喔,CWin(w,h)對那2個建構子都可呼 06/08 15:48
2F:→ realmojo:叫,所以不知道你要呼叫哪一個 06/08 15:48
3F:→ aquatear:奇怪勒... 一個是兩個參數的, 一個是三個的, 為什麼會分 06/08 15:54
4F:→ aquatear:不清呢 ? 06/08 15:54
5F:推 legendmtg:因為有預設參數 06/08 15:56
6F:推 sunkill:還是你沒宣告 id, width, geight? 06/08 16:58
7F:→ sunkill:我來亂的 你這好像是洪XX的C++教學手冊範例 也就是 06/08 16:59
8F:→ sunkill:「考備建構員」 那本 orz... 06/08 16:59
9F:→ aquatear:是的, 洪xx裡的範例,他是這麼寫的,我稍微改過,編譯過不了 06/08 17:02
10F:推 Ebergies:因為可以叫到: CWin( w, h, int h=0); 06/08 17:12
11F:推 zlw:重載的函數,選擇時是看參數個數跟資料型態。因為你最後一個h 06/08 17:22
12F:→ aquatear:所以真正的問題是他參數三個都是 int 就無法分辨了是嗎 06/08 17:23
13F:→ zlw:有預設值,就會隱含他可以等於 CWin(int, int) 就會模擬兩可 06/08 17:24