delphi声明类中属性遇到的一个问题!
unitquen_unti;interfacetypelink=^node;node=recorddata:longint;next:link;end;quen=clas...
unit quen_unti;
interface
type
link=^node;
node=record
data:longint;
next:link;
end;
quen=class
private
Fcounty: longint;
Fhead: link;
Ftail: link;
procedure Setcounty(const Value: longint);
procedure Sethead(const Value: link);
procedure Settail(const Value: link);
published
property head:link read Fhead write Sethead;
property tail:link read Ftail write Settail;
property county:longint read Fcounty write Setcounty;
end;
以上是我用delphi写的单元文件的声明部分。编译后出现下面错误
[DCC Error] quen_unti.pas(19): E2188 Published property 'head' cannot be of type POINTER
(错误的地方光标停在read前面)
意思是这个属性不能定义为指针??那我该怎么写?
我想用这个模拟一个队列。用链表的方式。
能解释清楚一点么?为什么用public而不用published呢? 展开
interface
type
link=^node;
node=record
data:longint;
next:link;
end;
quen=class
private
Fcounty: longint;
Fhead: link;
Ftail: link;
procedure Setcounty(const Value: longint);
procedure Sethead(const Value: link);
procedure Settail(const Value: link);
published
property head:link read Fhead write Sethead;
property tail:link read Ftail write Settail;
property county:longint read Fcounty write Setcounty;
end;
以上是我用delphi写的单元文件的声明部分。编译后出现下面错误
[DCC Error] quen_unti.pas(19): E2188 Published property 'head' cannot be of type POINTER
(错误的地方光标停在read前面)
意思是这个属性不能定义为指针??那我该怎么写?
我想用这个模拟一个队列。用链表的方式。
能解释清楚一点么?为什么用public而不用published呢? 展开
2个回答
2009-08-10
展开全部
将published改为public
作为类来用都没区别 但是作为控件来说就有区别了 从字面上说: Public是公开 Published是公开发布 控件既有Public的属性,也有Published的属性 在Published部分声明的成员,其可见性与在Public部分声明的成员的可见性是一样的,它们都是公共的,所谓公共的就是说这些成员可以被其它类的实例引用,Published和Public的区别在于成员的运行期类型信息不同,delphi的元件库VCL正是通过运行期类型信息来访问元件的属性值的,此外Delphi 的IDE还通过运行期类型信息决定Object Inspector中的属性列表。 注意:只有当编译开关$M的状态为{$M+}时或者基类是用{$M+}编译的时,类的声明中才能有Publish- ed部分,换句话说,编译开关$M用于控制运行期类型信息的生成。 在Published部分声明的成员一般是属性,不过也可以声明字段,Object Pascal规定, 在Published 部分声明的字段只能是类类型的,如果是其它类型的字段中只能在Public、Protected或Private部分声明。在Published部分声明的属性不能是数组属性,另外属性的数据类型只能是有序类型、部分实型(single,Double,Extended,Comp)、字符串类型、小集合类型、类类型或者方法指针类型,其中小集合类型是指集合的基类型的上下界序号在0到15之间的集合。 简单来说,就是控件只有Published的属性才会出现在Object Inspector中 深入一点说,就是Delphi会为Published的属性编译生成RTTI(Runtime Type Information)信息,而RTTI使应用程序能动态查询一个对象的数据成员和属性,也能定位它的方法
作为类来用都没区别 但是作为控件来说就有区别了 从字面上说: Public是公开 Published是公开发布 控件既有Public的属性,也有Published的属性 在Published部分声明的成员,其可见性与在Public部分声明的成员的可见性是一样的,它们都是公共的,所谓公共的就是说这些成员可以被其它类的实例引用,Published和Public的区别在于成员的运行期类型信息不同,delphi的元件库VCL正是通过运行期类型信息来访问元件的属性值的,此外Delphi 的IDE还通过运行期类型信息决定Object Inspector中的属性列表。 注意:只有当编译开关$M的状态为{$M+}时或者基类是用{$M+}编译的时,类的声明中才能有Publish- ed部分,换句话说,编译开关$M用于控制运行期类型信息的生成。 在Published部分声明的成员一般是属性,不过也可以声明字段,Object Pascal规定, 在Published 部分声明的字段只能是类类型的,如果是其它类型的字段中只能在Public、Protected或Private部分声明。在Published部分声明的属性不能是数组属性,另外属性的数据类型只能是有序类型、部分实型(single,Double,Extended,Comp)、字符串类型、小集合类型、类类型或者方法指针类型,其中小集合类型是指集合的基类型的上下界序号在0到15之间的集合。 简单来说,就是控件只有Published的属性才会出现在Object Inspector中 深入一点说,就是Delphi会为Published的属性编译生成RTTI(Runtime Type Information)信息,而RTTI使应用程序能动态查询一个对象的数据成员和属性,也能定位它的方法
展开全部
type
link=^node;
node=record
data:longint;
next:link;
end;
quen=class
private
Fhead: link;
Ftail: link;
Fcounty: longint;
procedure Setcounty(const Value: longint);
procedure Sethead(const Value: link);
procedure Settail(const Value: link);
public
property head:link read Fhead write Sethead;
property tail:link read Ftail write Settail;
property county:longint read Fcounty write Setcounty;
end;
link=^node;
node=record
data:longint;
next:link;
end;
quen=class
private
Fhead: link;
Ftail: link;
Fcounty: longint;
procedure Setcounty(const Value: longint);
procedure Sethead(const Value: link);
procedure Settail(const Value: link);
public
property head:link read Fhead write Sethead;
property tail:link read Ftail write Settail;
property county:longint read Fcounty write Setcounty;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询