说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

一个关于自定义类的问题,请帮助!

编辑:说三道四文库 发布时间:2018-07-18 02:32
HTML文档下载 WORD文档下载 PDF文档下载
我在Unit1中定义了一个类:
  type Tuserinfo=class(TObject)
     public
         username:string;
  end;
  var userinfo:Tuserinfo;

然后在unit2中引用了unit1,在button1中写入:
      userinfo := Tuserinfo.create;
      userinfo.username := 'admin';
      showmessage(userinfo.username);//正常

然后在Unit3中引用了unit1和unit2
     showmessage(userinfo.username);//报错,
请问是怎么回事!

我顶一下
因为在unit2中,你创建了Tuserinfo的实例,而在在unit3中,你没创建,所以会报错
代码拿来一看!
还有就是记得create了后还要free
我不覺得有錯,除非你是沒用 form2 先創建 實例,就直接用 form3 showmessage了.
错误信息贴出来先

      userinfo := Tuserinfo.create;
      
你在Button1事件当中才创建该类的实例,在Unit3当中只有创建后才能用。
我的unit1中的定义都是在interface中定义的,包括var userinfo:Tuserinfo;所以我认为unit3中不需要在创建,我的这个userinfo是记录用户信息的,所以一次创建以后,要在所有的单元引用!错误代码是:
access violation at address 00404500 in module 'project1.exe'.Read of address 00000026
showmessage(form2.userinfo.username);
不行,我的userinfo是定义在接口(interface)中的,不属于form2,不能这样用!
同意!

你确认是在Button1按了之后再ShowMessage的吗?  不然没有创建, 当然会报错.

----------
回复人: PrgmLover(爱国者) ( ) 信誉:100  2003-09-17 21:59:00  得分:0 
 
 
  
      userinfo := Tuserinfo.create;
      
你在Button1事件当中才创建该类的实例,在Unit3当中只有创建后才能用。
  
 
但是我的userinfo是一个全局性的实例,定义在接口中,如果我在每个单元都重新创建,那么我的数据岂不是丢失了,我需要一次创建,然后在每个单元都调用该类中的数据!
这个错误信息确实是因为对象没有创建!
建议,如果在调用方法之前这个对象有可能还没创建,那么调用之前用Assigned(userinfo)函数检验一下。
大家告诉我该怎么改,我的目的是建一个类,然后在所有地方调用这个类,它作为一个公共类使用,因该怎么办!苦恼中
將訪類移到一公共的 unit中,然後在裹面創建,我估計你還是沒創建就使用出的錯!
注意, 你说不是类, 应该是实例.

可以在initialization section里创建. 在finalization section里析构.

回复人: iazxq(不吃皮蛋) ( ) 信誉:99  2003-09-18 12:14:00  得分:0 
 
 
  大家告诉我该怎么改,我的目的是建一个类,然后在所有地方调用这个类,它作为一个公共类使用,因该怎么办!苦恼中
  
 
我已经搞定了,谢谢大家的参与
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘