定义类,循环引用错误,该如何处理?

独醒子 2013-03-27 04:04:01
现有2个单元,分别有部门类、员工类。 期望定义如下:

部门:

unit unDep;
interface
uses unEmp;
type
TDep = class(TObject)
public
depID: string; //部门ID
depName: string; //部门名
depEmpCount: Integer; //部门员工数
depEmpList: array of TEmp; //部门员工列表 -----------------
depParentDepID: string; //父部门ID (若无父部门则为空)
ParentDep: TDep; //上级部门对象 ====
constructor Create();
destructor Destroy; override;
end;

implementation
uses unFrmMain;


员工:

unit unEmp;
interface
uses unDep;
type
TEmp = class(TObject)
public
empID: string; //用户ID号
empName: string; //用户姓名
ParentDep: TObject; //部门对象 ===
constructor Create;
destructor Destroy; override;
end;

implementation
uses unFrmMain;


因为在interface中都分别uses对方,会造成循环也能用错误。
那么这种需求该如何定义呢?
...全文
442 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiba7288 2013-03-28
  • 打赏
  • 举报
回复
引用 5 楼 yc515623876 的回复:
不行兩個類放在一個單元裡面 哈哈 問題就解決了
+1
火龙岛主 2013-03-28
  • 打赏
  • 举报
回复
两种方法: 1. 放在同一个unit中 2. 分别把引用的单元放在interface部分和implementation不同的部分,要错开。 问题: 1.类的职责不清 2.如果只是数据,没有其他作用,这两个类不定义也可,意义不大,而且增加了代码的复杂度。 细节: 既然定义了部门对象,为什么还要放TObject类型的变量? 如下所示: ParentDep: TObject; //部门对象 === 结论: 想法也许是好的,做法有点混乱。
看那山瞧那水 2013-03-28
  • 打赏
  • 举报
回复
引用 6 楼 pronet 的回复:
楼上的,放在一个单元里,也有前后的问题。前面的类不能有后面类类型的成员。 当然如我代码中用 TObject 类型也可以,但使用起来非得用个 TDep(XXX).XX 感觉很麻烦。
在implementation下声明个局部全局变量 var FFDep:TDep; 在类的构造函数里转 FFDep:=TDep(XXX); 这样类就可以在不同的单元了
独醒子 2013-03-28
  • 打赏
  • 举报
回复
看来还得靠自己啊。总算找到了。 前向声明: b = class; a = class(TObject) m_b:b; end; b = class(TObject) m_a:a; end; 这样就跟c的预定义一样了 可以循环引用了。
独醒子 2013-03-28
  • 打赏
  • 举报
回复
楼上的,放在一个单元里,也有前后的问题。前面的类不能有后面类类型的成员。 当然如我代码中用 TObject 类型也可以,但使用起来非得用个 TDep(XXX).XX 感觉很麻烦。
Andy-88 2013-03-27
  • 打赏
  • 举报
回复
不行兩個類放在一個單元裡面 哈哈 問題就解決了
独醒子 2013-03-27
  • 打赏
  • 举报
回复
我知道啊,我只是希望通过员工能找到部门;通过部门也能找到各员工。 只是举个例子,我希望实现这样的效果,不管这定义的是部门还是其他什么。 只想知道,这种互相引用的方式delphi能不能实现? 比如: 人员类 和 汽车类 人员类里有成员汽车s 表示他能开哪几辆车; 车类里有人员s 表示这辆车哪些人允许乘坐; 大概是这么个意思。 不管2个类是干啥的 就是想知道 是否有办法实现互相引用。
andwo 2013-03-27
  • 打赏
  • 举报
回复
是不是这样:员工已经含对应的部门,部门又有对应的员工列表,重复了,定义一个就够了吧,这样就不会重复引用了
独醒子 2013-03-27
  • 打赏
  • 举报
回复
我知道你说的,不过 在类成员中就有这个类型时,放implementation下面不可以吧?
andwo 2013-03-27
  • 打赏
  • 举报
回复
放在implementation下面的uses

5,391

社区成员

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

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