在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; 在我的MAIN.PAS单元中,我可以创建一个TTableAttrSet类型的变量. 主要用途Util … 到现在为止还挺好.我的问题是我需要将TTableAttrSet FROM main类型的var变量传递给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; 当我尝试这个时,我遇到了几个问题…… procedure TestAttr(var Attr: TTableAttrSet); 我得到的错误是TTableAttrSet是一个未声明的标识符.这是有道理的,因为定义在Main.pas中,’使用Main.pas’是在我的过程定义之后.我该如何解决这个问题?目前,我已经在Utils.pas文件和Main.pas的顶部复制了TTableAttrSet类型定义,但这似乎并不“正确”. 问题2).我遇到的更大问题是编译错误.在Main.pas的主叫线上 TestAttr(TabAttr); 我得到错误’实际和正式var参数的类型必须是标识’.据我所知,他们是完全相同的.什么是编译器抱怨? 解决方法
简单的解决方案是将TTableAttributeType的声明移动到Utils单元.你不能两次声明它,因为那时你有两种不同的类型.这对你没用,你只需要一种类型.
只要主单元不需要在其接口部分引用TTableAttributeType,此解决方案就可以工作.由于Utils单元显然需要这样做,否则会在单元接口部分之间产生循环依赖,这是非法的. 如果Main和Utils单元都需要在其接口部分中引用TTableAttributeType,那么您需要创建另一个仅包含类型声明的单元. Utils和Main在其接口部分可以使用该单元. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- hdu 1316 How Many Fibs?(大数,二分)
- 在Groovy中使用XML MarkupBuilder动态添加多个XML元素/容器
- delphi idHttp下载文件
- Perl Socket 简单例子
- Delphi – 从TPanel删除运行时生成的按钮
- Perl Learning - 17 (/m, perl comcomand line, $^I, $ARGV
- Delphi开发组件:EmbeddedWebBrowser D5-XE2 FS Version 14
- perl – 如何在运行时替换Moose对象的方法?
- php – Laravel 5 isDirty()总是返回false
- leetcode1087