全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1608
推到 Plurk!
推到 Facebook!

有關多個 Form 底下 function 的呼叫

缺席
brian_chen
一般會員


發表:14
回覆:20
積分:6
註冊:2007-06-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-06-22 15:59:58 IP:59.120.xxx.xxx 訂閱
目前遇到一個問題
舉例來說

有三個 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-06-22 18:20:53 IP:210.64.xxx.xxx 訂閱
問題似乎不是你想的那樣…

你的三個form都是平行的,都來自同一個父親--TForm。 而TForm裡當然不可能有abc這三個method(不應稱function)。

你該把繼承的概念與虛擬函式virtual重讀幾次。

複習一下後也許就會有答案了!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
brian_chen
一般會員


發表:14
回覆:20
積分:6
註冊:2007-06-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-06-22 18:41:45 IP:59.120.xxx.xxx 訂閱

所以如果要改成我這種寫法的話
必須去 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重讀幾次。

複習一下後也許就會有答案了!
系統時間:2024-04-20 11:25:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!