“实际和正式var参数的类型必须相同”程序中的错误

时间:2010-12-10 17:29:28

标签: delphi procedure

我正在尝试在delphi中编写一个过程。 此过程获取TControl后代元素的名称,然后尝试更改某些属性。 但是当我尝试这样做时,Delphi会出现如下错误:

  

E2033实际和正式变量的类型   参数必须相同

步骤:

procedure Change_prop(var Control: TControl;height:integer;width:integer);
begin
//......
end;

用法示例:Change_prop(Label1, 50,200); 什么可以解决这个错误..谢谢。

3 个答案:

答案 0 :(得分:9)

您只需要删除Control参数中的var并使其成为值参数。因为Delphi对象实际上是作为引用类型实现的,所以即使将它们作为值或const参数传递给过程,也可以调用它们上的方法,更改成员字段等。

答案 1 :(得分:5)

只需删除 var - 您无需更改Control的属性:

procedure Change_prop(Control: TControl;height:integer;width:integer);
begin
......
end;

答案 2 :(得分:2)

正如大卫所说,问题出现在 var 中。这并不意味着你可以修改TControl的成员,这意味着你可以用另一个完全不同的TControl 替换 TControl,因为对象是引用类型。

如果要将对象传递给 var 参数,则必须将传递的变量声明为与参数完全相同的类型,以保持类型安全。否则,你可以这样做:

procedure TForm1.VarControl(var control: TControl);
begin
  control := TButton.Create;
end;

procedure TForm1.Mistake;
begin
  VarControl(self.Memo1); //defined as TMemo
  Memo1.Lines.Text := 'Undefined behavior here...';
end;