小编Geo*_*e S的帖子

在Delphi中,问题是跨单元使用类型定义

使用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;
Run Code Online (Sandbox Code Playgroud)

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

Main USES Util ... Util使用Main(第二个使用条款,在实现部分,所以我没有得到循环引用问题....

到现在为止还挺好.我的问题是我需要将TTableAttrSet FROM main类型的var变量传递给Utils.

在main.pas

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

    begin
    TestAttr (TabAttr);
    end;
Run Code Online (Sandbox Code Playgroud)

在UTILS.PAS,我有

procedure TestAttr(var Attr: TTableAttrSet);
begin
      Attr := [tabROOT, tabCOMPRESSED];
end;
Run Code Online (Sandbox Code Playgroud)

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

procedure TestAttr(var Attr: TTableAttrSet);
Run Code Online (Sandbox Code Playgroud)

我得到的错误是TTableAttrSet是一个未声明的标识符.这是有道理的,因为定义在Main.pas中,'使用Main.pas'是在我的过程定义之后.我该如何解决这个问题?目前,我已经在Utils.pas文件和Main.pas的顶部复制了TTableAttrSet类型定义,但这似乎并不"正确".

问题2).我遇到的更大问题是编译错误.在Main.pas的主叫线上

TestAttr(TabAttr);
Run Code Online (Sandbox Code Playgroud)

我得到错误'实际和正式var参数的类型必须是标识的'.据我所知,他们是完全相同的.什么是编译器抱怨?

delphi types units-of-measurement definitions

4
推荐指数
1
解决办法
614
查看次数

标签 统计

definitions ×1

delphi ×1

types ×1

units-of-measurement ×1