麻烦大家帮我看看这个类中的属性定义有什么不对的地方?小弟是初学delphi的面向对象编程。

chenshu19791003 2005-04-24 09:43:29
TDBOperate = Class(TObject)
private
FItems: TStrings;
FQuery: TADOQuery;
FSavePass: Boolean;
protected
procedure SetItems(const Value: TStrings);
function GetIsSavePass(UserName: string): Boolean;
procedure SetIsSavePass(SavePass: char = '1');
public
constructor Create; overload;
property Items: TStrings read FItems write SetItems;
property IfSavePassWord: Boolean read FSavePass write SetIsSavePass default false;
procedure GetTRecentLogin;
end;

其中的函数和过程 我都定义了 可是在编译的时候总是提示我[Error] UDBOperate.pas(21): Incompatible types 。这是怎么回事呀?
...全文
106 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzlingaaa 2005-04-25
  • 打赏
  • 举报
回复
procedure SetIsSavePass(SavePass: char = '1');
property IfSavePassWord: Boolean read FSavePass write <<<SetIsSavePass>>>
zzlingaaa 2005-04-25
  • 打赏
  • 举报
回复
每个属性都有一个read说明符、一个write说明符或者两个都有。它们就是被调用的访问说明符(access specifiers)。访问说明符具有如下形式

read fieldOrMethod

write fieldOrMethod

这里的fieldOrMethod是一个域或方法的名称(不管是域还是方法,都必需是与属性在同一个类或祖先类中声明的)。



·
如果fieldOrMethod在同一个类中声明过,那么它必需出现在属性声明之前。如果它声明于祖先类中,那么它必需在后裔类中是可见的;也就是说,如果祖先类的声明在不同的单元中,那么这里的fieldOrMethod不能是一个私有的域或方法。

·
如果fieldOrMethod是一个域,那么它必需与属性具有相同的类型。

·
如果fieldOrMethod是一个方法,那么它不能被重载。而且,公布属性的访问方法必需使用缺省的register调用约定。

·
在read说明符中,如果fieldOrMethod是一个方法,那么它必需是一个无参数的函数并且函数返回的类型与属性的类型相同。

·
在write说明符中,如果fieldOrMethod是一个方法,那么它必需是一个过程,并且该过程接受一个单独的值参数或const参数,并且参数类型与属性类型相同。

chenshu19791003 2005-04-25
  • 打赏
  • 举报
回复
麻烦你我想问一下在类的属性中的read 和 write 中的参数必须和属性的类型相同吗?
mianbaosoft 2005-04-25
  • 打赏
  • 举报
回复
char = '1' //string <> char
zhlmxh 2005-04-25
  • 打赏
  • 举报
回复
不一定是定义部分的问题,可能是引用时有错误
gzmhero 2005-04-24
  • 打赏
  • 举报
回复
不匹配的类型。

procedure SetIsSavePass(SavePass: char = '1');
-------------------》》》》》》》》》》》》》
procedure SetIsSavePass(SavePass: boolean = true);
GARNETT2183 2005-04-24
  • 打赏
  • 举报
回复
不兼容的类型....

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧