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

想要在Unit2使用一個在Unit1宣告的參數之問題?

答題得分者是:ikk
sunwingman
一般會員


發表:26
回覆:47
積分:14
註冊:2008-05-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-06-19 21:34:31 IP:118.169.xxx.xxx 訂閱
我在Unit1.cpp中,宣告如下:

[code cpp]
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
abc = 100;
}

[/code]

整數abc是宣告在Unit1.h檔裡的Public中

然後,我新增一個Dialog,在Dialog中放上一個Button
接著在Button裡寫程式碼如下:

[code cpp]
void __fastcall TOKRightDlg::Button1Click(TObject *Sender)
{

TForm1 fr;
def = fr.abc;
ShowMessage(def);
}

[/code]

整數def也是宣告在Unit2.h檔裡的Public中
不過會出現下列錯誤:
"VCL style classes must be constructed using operator new"

所以我把她改成如下:

[code cpp]
void __fastcall TOKRightDlg::Button1Click(TObject *Sender)
{

TForm1 *fr = new TForm1();
def = fr->abc;
ShowMessage(def);
}

[/code]

不過還是會出現下列錯誤:
" Could not find a match for 'TForm1::TForm1()' "

所以我又把她改成如下:

[code cpp]
void __fastcall TOKRightDlg::Button1Click(TObject *Sender)
{

TForm::TForm1 *fr = new TForm::TForm1();
def = fr->abc;
ShowMessage(def);
}

[/code]

錯誤依然在,訊息如下:
" Undefined symbol 'TForm1' "
" Undefined symbol 'fr' "
" Type name expected"
" Statement missing; "

所以想上來請教大家一下要怎樣宣告才對?
我承認我物件導向的概念不是很好
所以請多多指教...
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-06-19 23:39:37 IP:61.60.xxx.xxx 未訂閱
在 Unit2.cpp 中,宣告 #include "Unit1.h" 應該就可以了
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
sunwingman
一般會員


發表:26
回覆:47
積分:14
註冊:2008-05-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-06-20 09:08:16 IP:61.61.xxx.xxx 訂閱
版大你好:

我已經有在Unit2.cpp中
include "Unit1.h"了

我在Unit1.cpp中
也有include "Unit2.h"

問題仍然一樣 ><
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-06-20 09:54:06 IP:140.116.xxx.xxx 訂閱
看看在Unit1.h 中是否有宣告 extern PACKAGE TForm1 *Form1;
有的話直接拿Form1->abc來用.
------
FPGA驗證, FPGA開發平台, http://smims.com
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-06-20 10:35:19 IP:210.208.xxx.xxx 未訂閱
我已經試過是可以的,步驟如下:
(1)在 BCB 開發環境中,按「Project/Options/Forms」,確定「Form1」是「Main form」,「Form1」在「Auto create forms」欄位,「OKRightDlg」在「Available forms」欄位
(2)有關「Form1」的程式碼如下

[code cpp]
// Unit1.h
//---------------------------------------------------------------------------

class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
int abc;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------

// Unit1.cpp
#include "Unit1.h"
#include "Unit2.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TOKRightDlg *dlg=new TOKRightDlg(Application);
dlg->ShowModal();
delete dlg;
}
[/code]

(3)有關「OKRightDlg」的程式碼如下

[code cpp]
// Unit2.h
//----------------------------------------------------------------------------
class TOKRightDlg : public TForm
{
__published:
TButton *OKBtn;
TButton *CancelBtn;
TBevel *Bevel1;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private:
public:
virtual __fastcall TOKRightDlg(TComponent* AOwner);
int def;
};
//----------------------------------------------------------------------------
extern PACKAGE TOKRightDlg *OKRightDlg;
//----------------------------------------------------------------------------

// Unit2.cpp
#include "Unit2.h"
#include "Unit1.h"
void __fastcall TOKRightDlg::Button1Click(TObject *Sender)
{
def=Form1->abc;
ShowMessage(def);
}
[/code]

(4)然後再執行看看是否可行
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
sunwingman
一般會員


發表:26
回覆:47
積分:14
註冊:2008-05-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-06-20 12:51:23 IP:61.61.xxx.xxx 訂閱
謝謝ikk以及板大

用Form1->這樣子的確就可以了
不過對版大不好意思
由於我先看到ikk的回覆試用就可以work了
所以給分就給ikk了
感謝各位幫忙^^
系統時間:2024-11-22 11:37:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!