有關多個 Form 底下 function 的呼叫 |
缺席
|
brian_chen
一般會員 發表:14 回覆:20 積分:6 註冊:2007-06-26 發送簡訊給我 |
目前遇到一個問題
舉例來說 有三個 Form 主要 跟 二個次要的 程式碼架構大致上如下 [code cpp] class TFormA : public TForm { public: TImage* img; a(Timage *img); b(Timage *img); c(Timage *img); } class TFormB : public TForm { public: TImage* img; a(Timage *img); b(Timage *img); c(Timage *img); } class TFormMain : public TForm { void __fastcall TFormMain ::FormButtonClick(TObject *Sender) { do somethimg.... setImg(FormA); do something..... setImg(FormB); } void __fastcall TFormMain ::setImg(TForm* refForm) { refForm->a(refForm->img); refForm->b(refForm->img); refForm->c(refForm->img); } } [/code] compiler後會出現底下的錯誤訊息 'a' is not a member of 'TForm' 'b' is not a member of 'TForm' 'c' is not a member of 'TForm' 意思上我大概知道問題 當我把 子類別 透過參數的傳遞過程中 bcb 會把它轉成 父類別 傳過去 但 父類別 裡面並沒有 a() b() c() 這三個 function 所以會造成 compiler 不會過 所以是不是我在 setImg 這個 function裡面 必需要再把 父類別 往下轉型才可以抓到 子類別 裡面的 a() b() c() 這三個 function 會做這個的原因是因為有蠻段會有相同的寫法 所以另外寫一個 func 來減少程式碼 但就遇到了這個問題 所以想請問一下版上的大大有沒有人有遇過此類問題的 或是有什麼其它更好的寫法可以參考 謝謝。 |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
brian_chen
一般會員 發表:14 回覆:20 積分:6 註冊:2007-06-26 發送簡訊給我 |
所以如果要改成我這種寫法的話 必須去 TForm 這個 class 加上三條虛擬函式 virture a(); virture b(); virture c(); 才可以做這樣的動作是吧? 但我的另一個想法是 我今天把 FormA(B) 的指標傳進去 理應在 setImg 讀出來的 refForm 不是應該等於 FormA(B) 嗎? 所以在 setImg 裡應該可以直接用 FormA(B) 的成員函式不是? (當初的想法是這樣啦) 還是我在寫 setImg(參數) 應該是要傳一個物件進去 類似 setImg(TObject* object)? 而不是傳一個 Form 進去? 謝謝。 ===================引 用 aftcast 文 章=================== 問題似乎不是你想的那樣… 你的三個form都是平行的,都來自同一個父親--TForm。 而TForm裡當然不可能有abc這三個method(不應稱function)。 你該把繼承的概念與虛擬函式virtual重讀幾次。 複習一下後也許就會有答案了! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |