这个标题已经有很多问题了;但是,没有人解决我的问题。我实际尝试通过引用传递,但在尝试编译我的代码时收到E2033: Types of actual and formal var parameters must be indentical
错误。我试图传递三(3)个变量,每个变量是Integer
,两个是引用(Var
)而另一个不是。
我不明白我的代码的问题,如下所示。我已经包含了声明,定义和调用。
常规声明:
private
updateDeviceStatus(Var aReturnCount, aNotFoundCount: Integer; aNumOfDevices: Integer);
我试图不压缩参数的声明,并在前两个声明Var
,明确地'但是,这不起作用。
问题1:是错误,因为我通过引用和值混合(如果我记得,正确的话,某些语言不允许这样做)?
常规的定义:
procedure TfrmReturnMeterToMfg.UpdateDeviceStatus(Var aReturnCount, aNotFoundCount: Integer; aNumOfDevices : Integer);
begin
// DO SOMETHING
end;
实际上,例程正文中的代码对于问题是微不足道的,并且不会影响问题(至少在这种情况下它不应该是原因)。
常规召唤:
以下内容包含在另一个例程的正文中:
// local variables:
var ReturnCount, NotFoundCount, NumOfDevices: Integer;
begin
// SOMETHING HAPPENS TO EACH OF THESE VALUES (THEY ARE INCREMENTED)
UpdateDeviceStatus([ReturnCount], [NotFoundCount], NumOfDevices);
end;
然后我收到错误。
问题2 :这是我在调用例程时尝试传递参数的语法结果吗?
编辑
所以,你可能想知道(你是一个更有经验的Delphi程序员),"这个百灵鸟在哪里拿到了[
和]
位?这是我正在咨询的资源(看看为什么我在下面的评论中看错了):consulted resource。
答案 0 :(得分:4)
我猜括号是问题所在。 这段代码适合我:
program Project12;
{$APPTYPE CONSOLE}
type
TfrmReturnMeterToMfg = class
private
procedure UpdateDeviceStatus(Var aReturnCount, aNotFoundCount: Integer; aNumOfDevices : Integer);
end;
procedure TfrmReturnMeterToMfg.UpdateDeviceStatus(Var aReturnCount, aNotFoundCount: Integer; aNumOfDevices : Integer);
begin
// DO SOMETHING
end;
var thing : TfrmReturnMeterToMfg;
ReturnCount, NotFoundCount, NumOfDevices: Integer;
begin
ReturnCount := 4;
NotFoundCount := 2;
NumOfDevices := 42;
thing := TfrmReturnMeterToMfg.Create;
thing.UpdateDeviceStatus( ReturnCount, NotFoundCount, NumOfDevices);
thing.Free;
end.
在参数周围添加括号会完全改变代码的含义,它们意味着什么。在这种特殊情况下,通过添加括号,您可以指示编译器传递
UpdateDeviceStatus(
[ ReturnCount ], // array or set of integer (with one element)
[ NotFoundCount ], // same again here
NumOfDevices // integer
);
这是完全不同的东西。