除了第一个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;

解决方案 »

  1.   

    我还有第二个问题: 
    procedure Add(NewPart:^TPart{??????只能用type定义的东西   
        >});virtual
      

  2.   

    这一句当然还可以写成
    procedure Add(NewPart:PPart);virtual;
    或者你不怕麻烦也可以写成:
    procedure Add(NewPart:Pointer);virtual;
    这种写法使用时要进行强制转换。过程参数可以不使用在type中定义的类型,你的写法当然是可以
      

  3.   

    sorry ,写错了
    应该是procedure Add(NewPart:PTPart);virtual;
      

  4.   

    to  zwjchina(蒲石) 
      procedure Add(NewPart:^TPart);virtual;
      不能通过;[Error] Composite.pas(27): Identifier expected but '^' found;  
      
      

  5.   

    哦,那我搞错了,呵呵!
    过程参数里面不能使用^这个dd
    呵呵,但是并不是说不在type里面声明就不能在过程中使用
    例如:
    procedure Add(a:array of byte);我搜索了一下你的帖子,好象这是第一个!
    你不要不给分我哦,55~~
      

  6.   

    过程参数里面不能使用^这个dd    ???  为什么??
      
     type 
      pClass=^Class //到底作什么了??  
      
     
      

  7.   

    过程参数里面不能使用^这个dd    ???  为什么??
      
     type 
      pClass=^Class //到底作什么了??  
      
     
      

  8.   

    规定的语法,没有什么为什么。
    你可以看看Obect pascal语言的说明type
      PClass = ^Class//是声明一个类型
      

  9.   

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