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

為何加上var 後Complie時會出現 Type of actual and formal var parameters must be identical

答題得分者是:deity
danielx2000
一般會員


發表:29
回覆:33
積分:22
註冊:2002-09-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-12-29 17:36:47 IP:111.70.xxx.xxx 訂閱

[code delphi]
宣告區
function ReleaseForm( var frm: TForm): boolean;

implementation
function ReleaseForm( var frm: TForm): boolean;
begin
if Assigned(frm) then
begin
frm.Release;
frm := nil;
end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Application.CreateForm(TForm2,Form2);
Form2.Show;
ReleaseForm( Form2 );
if Form2<> nil then
ShowMessage('Form2 free Error');
end;

[/code]
加上var後出現的錯誤訊息Type of actual and formal var parameters must be identical

我看不出來是哪裡型態不一致
請各位幫我解惑
Thanks


P.D.
版主


發表:571
回覆:3880
積分:3666
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-12-29 20:45:31 IP:220.229.xxx.xxx 未訂閱
你定義了 frm 了嗎?
danielx2000
一般會員


發表:29
回覆:33
積分:22
註冊:2002-09-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-12-29 21:22:10 IP:59.127.xxx.xxx 訂閱
frm 我是當成一般變數名稱
沒有另外定義
請版主給一個例子

===================引 用 P.D. 文 章===================
你定義了 frm 了嗎?
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-12-29 22:44:07 IP:59.32.xxx.xxx 未訂閱
function ReleaseForm( var frm: TForm): boolean;

implementation
function ReleaseForm( var frm: TForm): boolean;
begin
if Assigned(frm) then
begin
frm.Release;
frm := nil;
end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
form2:TForm;

begin
Application.CreateForm(TForm2,Form2);
Form2.Show;
ReleaseForm( Form2 );
if Form2<> nil then
ShowMessage('Form2 free Error');
end;

一个是TForm、一个是TForm2,所以会报错
================================================

functionDoubleByValue(X:Integer):Integer;
begin
X:=X*2;
Result:=X;
end;
functionDoubleByRef(var X:Integer):Integer;
begin
X:=X*2;
Result:=X;
end;

var
I, J, V, W: Integer;
begin
I := 4;
V := 4;
J := DoubleByValue(I); // J = 8, I = 4
W := DoubleByRef(V); // W = 8, V = 8
end;


通过引用将变量传递给过程和函数利用引用传递参数时,其接收变量的过程和函数能够改变变量的值。var的作用是赋值变量的地址,变量的值也就根着改变。

編輯記錄
deity 重新編輯於 2010-12-29 07:47:07, 註解 無‧
danielx2000
一般會員


發表:29
回覆:33
積分:22
註冊:2002-09-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-12-30 17:50:32 IP:111.70.xxx.xxx 訂閱

[code delphi]
var
Form1: TForm1;

implementation
uses Unit2;

function ReleaseForm( var frm: TForm): boolean;
begin
if Assigned(frm) then
begin
frm.Release;
frm := nil;
end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Application.CreateForm(TForm2,Form2);
Form2.Show;
ReleaseForm( TForm(Form2) ); //<---改成這樣就OK了
if Form2<> nil then
ShowMessage('Form2 free Error');
end;


[/code]

編輯記錄
danielx2000 重新編輯於 2010-12-30 02:51:19, 註解 無‧
系統時間:2017-10-20 9:16:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!