gpt4 book ai didi

delphi - 在 Delphi 中,跨单元使用类型定义时出现问题

转载 作者:行者123 更新时间:2023-12-03 15:26:07 24 4
gpt4 key购买 nike

使用 Delphi 2010...我有一组二进制属性想要组合在一起。我已经这样定义了......

type
TTableAttributeType = (
tabROOT = 1,
tabONLINE = 2,
tabPARTITIONED = 3,
tabCOMPRESSED = 4,
);

// Make a set of of the Table Attribute types...
type
TTableAttrSet = Set of TTableAttributeType;

在我的 MAIN.PAS 单元中,我可以创建 TTableAttrSet 类型的变量。另一个单元 UTILS.PAS 也需要理解 TTableAttrSet 类型。这是由 USES 子句处理的......

主要用途Util...Util USES Main(第二个使用子句,在实现部分下,所以我不会遇到循环引用问题......

到目前为止一切顺利。我的问题是我需要将 TTableAttrSet 类型的 var 变量从 main 传递到 Utils。

在main.pas中

procedure TForm1.Button1Click(Sender: TObject);
var
TabAttr : TTableAttrSet;

begin
TestAttr (TabAttr);
end;

在 UTILS.PAS 中,我有

procedure TestAttr(var Attr: TTableAttrSet);
begin
Attr := [tabROOT, tabCOMPRESSED];
end;

当我尝试这个时,我遇到了几个问题......问题1)。当我在 utils.pas 顶部定义过程定义时,

procedure TestAttr(var Attr: TTableAttrSet);

我收到错误,TTableAttrSet 是未声明的标识符。这是有道理的,因为定义位于 Main.pas 中,而“uses Main.pas”位于我的过程定义之后。我该如何解决这个问题?目前,我已在 Utils.pas 文件和 Main.pas 的顶部复制了 TTableAttrSet 类型定义,但这“似乎不是正确的方式”。

问题 2)。我遇到的更大问题是编译错误。在 Main.pas 中的调用线路上

TestAttr(TabAttr);

我收到错误“实际和形式 var 参数的类型必须相同”。据我所知,它们是相同的。编译器提示什么?

最佳答案

简单的解决方案是移动 TTableAttributeType 的声明到实用程序单元。你不能声明它两次,因为这样你就有了两种不同的类型。这对你来说没有用,你只需要一种类型。

只要主机不需要引用TTableAttributeType,该解决方案就可以工作。在其界面部分。由于 Utils 单元显然需要这样做,那么这将在单元接口(interface)部分之间创建循环依赖关系,这是非法的。

如果Main和Utils单元都需要引用TTableAttributeType在它们的接口(interface)部分中,您需要创建另一个仅包含类型声明的单元。该单元可以被 Utils 和 Main 在其 interface 中使用。部分。

关于delphi - 在 Delphi 中,跨单元使用类型定义时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6493023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com