//func.pas文件
.....
type
   Tfunc = Class
     i:integer;
     str:String;
   private
     //
   public
     function SayHello():boolean;
   end;var
  func: Tfunc;implementation......
最后在一个窗体里引用func.pasprocedure TForm1.Button1Click(Sender: TObject);
begin
  func.SayHello();
end;-----------------------------------------
问题如下:func是什么时候创建的?应该在什么地方释放?用不用释放?
        

解决方案 »

  1.   

    找 func:=Tfunc.Create;这句代码。
      

  2.   

    找 func:=Tfunc.Create;这句代码。----------------------------------
    并没有创建func啊,只是在func.pas里有一句
    var
    func: Tfunc;
      

  3.   

    并没有创建func啊,只是在func.pas里有一句
    var
    func: Tfunc;
    ----------------------------------------------
    你自己不说了func没有创建,因为没有这一句:func:=Tfunc.Create;没有
    创建当然也不存在释放的问题。
      

  4.   

    在引用func的单元里找找,应该有func := tfunc.create;
      

  5.   

    回复人:bluekitty(软件黑领) ( 五级(中级)) 信誉:99  2007-5-8 16:53:24  得分:0
    ?  并没有创建func啊,只是在func.pas里有一句
    var
    func: Tfunc;
    ----------------------------------------------
    你自己不说了func没有创建,因为没有这一句:func:=Tfunc.Create;没有
    创建当然也不存在释放的问题。======================================
    难道说:只要加上一句var func: Tfunc,就不用创建这个类了,还是Delphi在后台自动创建?
      

  6.   

    这种对象访问很不正常,除非类是完全静态的,否则就要出现av了。
    ------------------------------------------------------○(^_^)○  什么叫做“完全静态”?“av”是啥谢谢!
      

  7.   

    难道说:只要加上一句var func: Tfunc,就不用创建这个类了
    ----------------------------------------------------------------
    不是创建类,是创建对象,除非Tfunc是类属,类本身是在内存中静态存在
    的,否则func:=Tfunc.Create;这一句就会出现av,但非静态类里一定有动
    态属性或方法的,在这一句func:=Tfunc.Create;之前,动态属性或方法都
    没有初始化,就是说在内存没有这些动态对象,这时候去访问他们就会有
    av错误。
      

  8.   

    av=access violation,非法内存访问。
      

  9.   

    ○(^_^)○ 能不能举个例子,什么样算是“动态属性或方法”方法啊?type
      Tfunc = Class
        i:integer;
        str:String;
      private
        //
      public
        function SayHello():boolean;
    end;上面的变量 i,str 算不算动态属性或者方法?SayHello()函数呢?
      

  10.   

    如果整个项目里面都没有func: Tfunc;的创建语句,那么根本就是错误,不是提倡不提倡问题了
      

  11.   

    func只是一个指向类实体的指针变量。只有创建一个Tfunc实例,然后赋给func,才能通过func进行访问,要不会出错的。你搜索一下在那创建了,Search->Find In Files ,输入 Tfunc.Create
      

  12.   

    静态方法是c++的叫法,在d中因该对应的是类方法,就是:
    static void method...
    class procedure....
    具体有没有动态属性或者方法我也不知道,这是我自己根据静态方法理解的,也不知道学名应该叫什么,就是和具体对象相关的那些变量,c中叫实例变量,c中规定静态方法不能访问实例变量,象你说得那些i,str什么的就是我理解的动态字段或者叫实例字段。
    这种做法要根据实际来确定,静态方法也有它的好处,不管你创建了多少个对象,静态方法在内存中只有一个副本。而且静态方法不是通过实例访问的,是通过类访问的,func.sayhello()这种访问是怎么也说不通的。