【发布时间】:2014-10-16 06:23:28
【问题描述】:
这个标题已经有很多问题了;但是,没有一个解决我的问题。我实际上试图通过引用传递,但在尝试编译我的代码时收到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 程序员),“这个百灵鸟从哪里弄到 [ 和 ] 位?这是我咨询的资源(看看我为什么看cmets 中有错误,如下):consulted resource.
【问题讨论】:
-
为什么要在调用中的参数周围加上
[方括号]?你想将它们作为数组传递吗?为什么?当函数名称是UpdateDeviceStatus和p时,你为什么要调用UodateDeviceStatus? -
@JensG 所以,我从您的评论中推断不需要括号?其次,这是我在向 SO 输入代码时的拼写错误。谢谢。
-
是的。我只是想确认哪些错误只是拼写错误,哪些不是。 ;-)
-
你用的哪本书告诉你要把参数放在括号里?
-
我明白了。谢谢你。这些示例使用
ShowMessageFmt。你的函数看起来像ShowMessageFmt的声明吗?注意“通过引用传递数据”部分,查看参数(A)实际通过引用传递的地方。它不在括号内。