一个关于自定义类的简单问题,但请大家赐教,有急用,多谢(100分)

  • 主题发起人 goodshilei
  • 开始时间
G

goodshilei

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了一个类是这样的
type
TA= class
private
m,n:integer;

public
constructor create;

procedure x( p,q:integer);
end;

constructor TA.create;
begin
inherited create;
m:=0;
n:=0;
end;

procedure TA.x( p,q:integer);
begin
m:=p+q;
n:=p-q;
end;

又声明了aa:TA;bb:TA;
在一个按钮点击事件中调用
aa.x(3,4);
bb.x(28,5);

目的想看看aa.m和bb.m的差别,可是编译通过了,但是运行时出现access violation at address 0043ff2d in module ‘project1。exe’,read of address FFFFFFFF错误,我不知道问题出现在哪里。
请各位大侠赐教
 
有没有Create
即aa:=Ta.Create;bb:=Ta.Create;
 
楼上兄弟讲的对,你的aa,bb不creat,只是相当于一个指针的作用,没有分配内存,所有在使用之前必须要creat一下
 
你的m,n是私有的,不能访问,你把mn定义在public里试试
 
to zhoujg:
私有的属性或方法在类中或同一单元内是可以访问的。
 
楼上说得对,报错是因为没有创建,就引用了,
还有一点,你的过程没有返回值,你把结果放在m和n里面了,m和n是私有变量,
外部单元没有办法引用私有变量,还是定义为public的好,或则变成两个函数,都有返回值
 
主要还是没有Create。
 
一定是没有create
begin
aa := TA.create;
bb := Ta.create;
{your code;}
end;
 
楼上说了需要创建,不过也别忘了释放:
begin
aa := TA.create;
bb := Ta.create;
try
aa.x(3,4);
bb.x(28,5);
finally
aa.Free;
bb.Free;
end;
end;
 
一定要create
 
顶部