[問題] 一個建構子的問題

看板C_and_CPP (C/C++)作者 (米蟲)時間16年前 (2009/06/08 15:46), 編輯推噓5(508)
留言13則, 6人參與, 最新討論串1/1
寫了一個類別 幫她寫了兩個建構函式 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

06/08 15:48, , 1F
錯誤訊息寫的滿清楚的喔,CWin(w,h)對那2個建構子都可呼
06/08 15:48, 1F

06/08 15:48, , 2F
叫,所以不知道你要呼叫哪一個
06/08 15:48, 2F

06/08 15:54, , 3F
奇怪勒... 一個是兩個參數的, 一個是三個的, 為什麼會分
06/08 15:54, 3F

06/08 15:54, , 4F
不清呢 ?
06/08 15:54, 4F

06/08 15:56, , 5F
因為有預設參數
06/08 15:56, 5F

06/08 16:58, , 6F
還是你沒宣告 id, width, geight?
06/08 16:58, 6F

06/08 16:59, , 7F
我來亂的 你這好像是洪XX的C++教學手冊範例 也就是
06/08 16:59, 7F

06/08 16:59, , 8F
「考備建構員」 那本 orz...
06/08 16:59, 8F

06/08 17:02, , 9F
是的, 洪xx裡的範例,他是這麼寫的,我稍微改過,編譯過不了
06/08 17:02, 9F

06/08 17:12, , 10F
因為可以叫到: CWin( w, h, int h=0);
06/08 17:12, 10F

06/08 17:22, , 11F
重載的函數,選擇時是看參數個數跟資料型態。因為你最後一個h
06/08 17:22, 11F

06/08 17:23, , 12F
所以真正的問題是他參數三個都是 int 就無法分辨了是嗎
06/08 17:23, 12F

06/08 17:24, , 13F
有預設值,就會隱含他可以等於 CWin(int, int) 就會模擬兩可
06/08 17:24, 13F
文章代碼(AID): #1ABC6-U1 (C_and_CPP)
文章代碼(AID): #1ABC6-U1 (C_and_CPP)