【发布时间】:2014-07-23 09:28:50
【问题描述】:
我正在使用 Delphi 6。我创建了一个项目并在其中添加了两个单元 Unit1 和 Unit2。
我有一个名为 XML_DIAGRAM='Diagram_Data' 的常量作为 XML 节点的常量,我还声明了Unit2 单元中的相同常量但具有不同的值“Diagram_Name”,我在主单元中使用这两个单元。
我的问题是,当我访问常量 XML_DIAGRAM 时,它总是包含来自单元 Unit2 的常量值。
如果在多个单元中声明了同名常量,那么当用户提出请求时,Delphi 如何决定从哪个单元获取常量?
我的代码:
unit Unit1;
const
DIAGRAM = 'Diagram_Data';
end.
unit Unit2;
const
DIAGRAM = 'Diagram_Name';
end.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Unit1,Unit2;
【问题讨论】:
-
我对 Delphi 了解不多(并且忘记了我的大部分 Pascal 知识),但是您不能在名称前加上单位名称吗?喜欢
Unit1.DIAGRAM和Unit2.DIAGRAM? This tutorial about scoping 似乎无论如何都表明了这一点。 -
我不能确定为什么 Unit2 优先,但可能是因为它是由 IDE 在 Unit1 之后加载的,所以 Unit2 的声明取代了 Unit1 的声明。无论如何,这是一个糟糕的约定,在共享单元中复制一个常量的名称。为什么不称它们为 XML_DIAGRAM_NAME 和 XML_DIAGRAM_DATA?
-
@Rahul - 它决定为documented。
-
@Rahul:这是典型的 Pascal:“稍后”声明将隐藏“早期”声明。这不是错误,这是设计的。要访问“早期”声明,只需使用单元名称对其进行限定,例如 J__ 建议:
Unit1.DIAGRAM。但我也同意他的观点,你应该使用不同的名字。 -
@RudyVelthuis Pascal 没有单位,当你有单位时,你只能有多个同名的声明。在 Pascal 中,不能有多个同名的声明。也许你在谈论 Pascal 的一些变体。
标签: delphi