如何前导声明一个class?和其他?

phonlee 2003-01-10 03:21:31
{ Forward class declarations }
type
TPart = class ; //-->如此声明为何不行?????
type
PTPart = ^TPart;
type
TPart = class
private
fstrName:string;
fChildList:TList;
protected
public
constructor Create(strName:string = '');
destructor Destroy; virtual;
property Name:string read fstrName;//全部名称:编号+设备类别
//子设备管理
procedure Add(NewPart:^TPart{??????只能用type定义的东西>});virtual;
procedure Remove(NewPart:^TPart);virtual;
//function Iterator<Equipment*>* CreateList();virtual;
end;


//这里是我设计的一个composite的其中的基类
欢迎大家一起讨论设计模式
QQ:5165504
...全文
75 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
diruser 2003-01-10
  • 打赏
  • 举报
回复
up
d983074 2003-01-10
  • 打赏
  • 举报
回复
type
pClass=^Class //定义类指针变量

在过程和函数的参数声明中,编译器不能识别“^”,必须使用定义过的变量类型(变量类型名称好像只能由字母组成),如pinteger、pchar或自定义变量类型,这里pClass就是自定义变量类型

zwjchina 2003-01-10
  • 打赏
  • 举报
回复
规定的语法,没有什么为什么。
你可以看看Obect pascal语言的说明

type
PClass = ^Class//是声明一个类型
phonlee 2003-01-10
  • 打赏
  • 举报
回复
过程参数里面不能使用^这个dd ??? 为什么??

type
pClass=^Class //到底作什么了??




phonlee 2003-01-10
  • 打赏
  • 举报
回复
过程参数里面不能使用^这个dd ??? 为什么??

type
pClass=^Class //到底作什么了??




zwjchina 2003-01-10
  • 打赏
  • 举报
回复
哦,那我搞错了,呵呵!
过程参数里面不能使用^这个dd
呵呵,但是并不是说不在type里面声明就不能在过程中使用
例如:
procedure Add(a:array of byte);

我搜索了一下你的帖子,好象这是第一个!
你不要不给分我哦,55~~
phonlee 2003-01-10
  • 打赏
  • 举报
回复
to zwjchina(蒲石)
procedure Add(NewPart:^TPart);virtual;
不能通过;

[Error] Composite.pas(27): Identifier expected but '^' found;




zwjchina 2003-01-10
  • 打赏
  • 举报
回复
sorry ,写错了
应该是procedure Add(NewPart:PTPart);virtual;
zwjchina 2003-01-10
  • 打赏
  • 举报
回复
这一句当然还可以写成
procedure Add(NewPart:PPart);virtual;
或者你不怕麻烦也可以写成:
procedure Add(NewPart:Pointer);virtual;
这种写法使用时要进行强制转换。

过程参数可以不使用在type中定义的类型,你的写法当然是可以
phonlee 2003-01-10
  • 打赏
  • 举报
回复
我还有第二个问题:
procedure Add(NewPart:^TPart{??????只能用type定义的东西
>});virtual
zwjchina 2003-01-10
  • 打赏
  • 举报
回复
除了第一个type外,把你后面的type都去掉,如下:

{ Forward class declarations }
type
TPart = class ; //-->如此声明为何不行?????
//^^^^^^^^^^^^^上面这一句也可以不要。

PTPart = ^TPart;

TPart = class
private
fstrName:string;
fChildList:TList;
protected
public
constructor Create(strName:string = '');
destructor Destroy; virtual;
property Name:string read fstrName;//全部名称:编号+设备类别
//子设备管理
procedure Add(NewPart:^TPart{??????只能用type定义的东西
>});virtual;
procedure Remove(NewPart:^TPart);virtual;
//function Iterator<Equipment*>* CreateList();virtual;
end;

5,392

社区成员

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

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