type 
tmatrix=class(tcomponent) 
private 
..... 
viewer:tmatrixviewer; 
..... 
protected 
publish 
end; 
tmatrixviewer=class(tcustomgrid) 
private 
...... 
matrix:tmatrix; 
..... 
protected 
..... 
也就是说我先定义了矩阵类(tmatrix)在矩阵类中有一个属性(viewer)它是tmatrixviewer类型,同时又定义了一个矩阵浏览部件(tmatrixviewer)在它的属性中有一个matrix是tmatrix类型,由于这两个类型都是自定义的类型编译时到viewer:tmatrixviewer;提示为不认识的类型.请问有什么办法解决? 

解决方案 »

  1.   

    先声明一下:
    type tmatrixviewer=class;////加上这句;
    tmatrix=class(tcomponent) 
    private 
    ..... 
    viewer:tmatrixviewer; 
    ..... 
    protected 
    published 
    end; 
    tmatrixviewer=class(tcustomgrid) 
    private 
    ...... 
    matrix:tmatrix; 
    ..... 
    protected 
    ..... 
      

  2.   

    我试过呀,也不行!
    编译到这
    tmatrix=class(tcomponent) 
    提示下面应该是tmatrixviewer的定义
    而且我查了好多书都没有这方面的介绍;
    tmatrixviewer=class;在delphi里就是定义类的语法,
    它和tmatrixviewer=class(object);是一样的。
      

  3.   

    天涯浪子说得没错,Delphi的帮助就这么做的,不信你查“Forward declarations and mutually dependent classes”。
    如果实在不行,你把tcustomgrid类的声明放到tmatrix之前,然后把viewer定义成tcustomgrid
    用的时候用: viewer:=Tmatrixviewer.create;
      

  4.   

    如果按newstarse所说的哪样做,(把tcustomgrid类的声明放到tmatrix之前,然后把viewer定义成tcustomgrid
    用的时候用: viewer:=Tmatrixviewer.create)
    哪么在部件注册后,在窗体设计时,将这两个部件拖放到窗体上后,无法在属性编辑器内
    将matrix的属性viewer设为matrixviewer,而且我要对tmatrixviewer做一些自定义,举个简单的
    例子吧:就象 乔丹<->乔丹的鞋子一样,而不是乔丹<->鞋子这样的对应关系.
    从理论上讲,就是应该先声明一下,
    我就是想问一下声明的语法.按照天涯浪子哪样声明是不行的.
    tmatrixviewer=class;在delphi里就是定义类的语法,
    它和tmatrixviewer=class(object);是一样的。
      

  5.   

    guestman(天涯浪子) 的做法是正确的。
      

  6.   

    还没搞好么?我在自己的机子上试了一下下面这个定义,一点问题都没有。
    type
      Tsecondclass =Class;
      TfirstClass =Class
        secondclass : TsecondClass;
      end;
      Tsecondclass =Class
        firstclass : TfirstClass;
      end;
    注意Tsecondclass =Class后面有分号,且后面只能跟上类的定义。