起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 214|回复: 14

【结贴】Incompatible types: "TCollectionItemClass" and &

[复制链接]
发表于 2009-3-23 15:40:23 | 显示全部楼层 |阅读模式
unit MainForm;

interface

uses
  Business.System, Business.Forms, ButoneComp;

type
  TMainForm = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BizFormCreate(Sender: TObject);
    procedure BizFormDestroy(Sender: TObject);
  private
    {private declarations}
    colList: TCollection;
  public
    {public declarations}
  end;

TMine = class(TCollectionItem)
  private
    FName: String;
  public
    property Name: String read FName write FName;
  end;

implementation

procedure TMainForm.BizFormCreate(Sender: TObject);
begin
  colList := TCollection.Create(TMine);
end;

procedure TMainForm.BizFormDestroy(Sender: TObject);
begin
  colList.Free;
end;

请指教上面代码的问题在哪里?编译的时候报错:
[错误]Biz:\CSYWKJ\BYCS\TEST002\HAND.FUNC.DIR\MainForm.Form.pas(40, 33): Incompatible types: "TCollectionItemClass" and "RuntimeTypeHandle"
回复

使用道具 举报

 楼主| 发表于 2009-3-23 15:42:20 | 显示全部楼层
这个补充跟帖要删除的,才发现没有删除权限……
回复 支持 反对

使用道具 举报

发表于 2009-3-23 16:20:06 | 显示全部楼层
平台不能用类型引用。
理论应该这么写
TA = class of TMine;
colList := TCollection.Create(TA);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-23 16:30:01 | 显示全部楼层
不知你编译了没有?我还是遍不过?

err.jpg

69.93 KB, 下载次数: 89

回复 支持 反对

使用道具 举报

发表于 2009-3-23 16:39:27 | 显示全部楼层
平台不能用类型引用。 看我上面的定语,我下面写的是delphi里面的写法。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-23 16:55:18 | 显示全部楼层
有没有补救办法?
上面其实只是我一个测试的例子,真实的情况是:
TFuncUnitSheetAccess = class(TExFuncUnitSheetAccess)
TExFuncUnitSheetAccess的定义来自于bpl包,我在平台里继承后,亦要使用同样来自bpl包中col(定义为TCollection)的新增方法(不是虚方法),该col实例的创建TCollection.Create(TExFuncUnitSheetAccess)放在包的虚方法中,回来我在平台覆盖后创建为TCollection.Create(TFuncUnitSheetAccess),现在就包上面同样的错?搞了好久都没搞定,才发现平台中TCollectionItem和TCollectionItemClass的定义和Delphi完全不是一码事,现在怎么搞?

请帮忙!搞了多少天了,现在急的不行……
谢谢!!
回复 支持 反对

使用道具 举报

发表于 2009-3-23 16:57:47 | 显示全部楼层
把TCollectionItem和TCollectionItemClass的定义定义放到bpl里面就可以用。
上面报错都是因为平台不支持3楼这种声明方式。也就是类引用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-24 09:36:54 | 显示全部楼层
??
没懂,Delphi的classes单元里本身就有
TCollectionItemClass = class of TCollectionItem;
的声明,而这些都已经包含于TCollection类的定义中,
我的bpl代码:
TExFuncUnitSheetAccess = class(TCollectionItem)
平台代码:
TFuncUnitSheetAccess = class(TExFuncUnitSheetAccess)
现在非要我把平台的类TFuncUnitSheetAccess放到bpl中定义么?可我不能这么做,有补救的方案么?
回复 支持 反对

使用道具 举报

发表于 2009-3-24 09:53:20 | 显示全部楼层
平台就是不支持类引用的,这个跟编译器有关。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-24 10:26:19 | 显示全部楼层
平台不能用类型引用。理论应该这么写……
平台不能用类型引用。 看我上面的定语……
上面报错都是因为平台不支持3楼这种声明方式。也就是类引用。
平台就是不支持类引用的,这个跟编译器有关。

上面的信息我已收到。

“把TCollectionItem和TCollectionItemClass的定义定义放到bpl里面就可以用。”?不懂。
不把平台的类TFuncUnitSheetAccess放到bpl中定义可以么?能否明确告诉我能或不能?
有没有补救的方案?有或没有。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-23 10:17 , Processed in 0.048525 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表