unit1中定义了类TA
type
 TA=class
 public
  val:integer;
 end;
unit2中引用unit1并定义了类TB
type
 TB=class
 public
  arr:array[1..10] of TA
 end;我在实力化TB后,
 B:=TB.create请问为什么不能直接使用 b.arr[1].val:=1;
而还要 arr[1]:=TA.create 一下?如何让tb实例化后,arr[1],arr[2]....可以直接使用?
否则我还要实例化10个 arr[x] 。初学delphi,问很弱智的问题,高手们指教!

解决方案 »

  1.   

    在TB.Create里写代码arr[i]:=TA.Create
      

  2.   

    arr:array[1..10] of TA 只是十个指针,内存中并没有10个val:integer,直到在constructor Create(  ); 里 arr[i]:=TA.Create 后。
      

  3.   

    Constructor TB.Create;
    var 
      i:integer;
    begin
      for i:=1 to 10 do
        arr[i]:=TA.Create;
      .
      .
      .
    end;
      

  4.   

    TA是类,TB也是类,类在使用前都要实例化。
      

  5.   

    那为什么Tmemo实例化的时候不用实例化 Tstrings?
      

  6.   

    如何实力化tb后,关于a的数组可以直接用,而不用再用代码手工实例化ta的?
    多谢大家。
      

  7.   

    TO:--如何实力化tb后,关于a的数组可以直接用,而不用再用代码手工实例化ta的?
    --多谢大家。你还是好好看看书吧!!!!!!!!!!!
      

  8.   

    那为什么Tmemo实例化的时候不用实例化 Tstrings?
    ----------你看Tmemo的构造函数了吗?就开始说TString没有实例化///////
    如何实力化tb后,关于a的数组可以直接用,而不用再用代码手工实例化ta的?
    多谢大家。
    /////delphi中的类对象必须先Create后使用,所以,如果你定义的类里面有类对象,必须在构造函数当中调用它们的构造函数,否则将会在使用过程中出现内存读取错误,而且在西沟函数中要释放那些创建了的对象...
      

  9.   

    你可以这样:
    unit1中定义了类TA
    type
     TA=class
     public
      val:integer;
     end;
    unit2中引用unit1并定义了类TB
    type
     TB=class
     public
      arr:array[1..10] of TA;
      constructor create;
     end;
    ......
    constructor TB.create;
    var i:integer;
    begin
      for i:= 1 to 10 do
        arr[i]:= TA.create;
    end;
    这样以后就要吧直接用了。
      

  10.   

    楼主对类和对象没搞懂,还是找一些'面向对象'的书好好看看,如果不搞明白,DELPHI连门开在那里都不知道.
      

  11.   

    一个类在创建实例时(即创建这个类的对象,或者说“类的实例化”),如果这个类还要使用到其他类的实例(对象),一般就是在这个类的构造函数中进行它们的创建工作,而在这个类的析构函数中进行它们的销毁工作。既然你已经意识到 TMemo 内部使用到了 TStrings,那你就应该相信 TMemo 的代码里使用 TStrings 对象前一定已经对它进行过实例化了,这个操作不是由Delphi自动完成的,而是在 TMemo 类的实现部分中确确实实包含这样的代码。
      

  12.   

    beyondtkl(大龙驹<干掉小日本>) ( ) 信誉:116  2005-04-14 11:23:00  得分: 0 
     
       挣大钱娶美女.
    ----------------老大好像对我的ID比较感兴趣...hehe