窗体上有一个button,三个edit,代码如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  Tagent =class
   name :string;
  end;  Tjobagent =class(Tagent)
  procedure haha(Sender: TObject);
  private
     a :array of integer;
  end;  Tmachineagent =class(Tagent)
  private
     b :array of integer;
  end;  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure Tjobagent.haha(Sender: TObject);
var
   machineagent :Tmachineagent;
   i :integer;
   result1 :boolean;
begin
   machineagent :=Tmachineagent.Create;
   setlength(a ,6);
   setlength(machineagent.b,6);
   for i :=0 to 5 do
   begin
      a[i] :=random(100);
      machineagent.b[i] :=a[i];
      form1.Edit1.Text :=inttostr(machineagent.b[i]);
   end;
   for i :=0 to 5 do
   begin
      result1 := (a[i]<>0) or (a[i+1]<>0)
   end;
   if result1 then
      form1.Edit2.Text :='ok'
   else
      form1.Edit2.Text :='no';
end;procedure TForm1.Button1Click(Sender: TObject);
var
   jobagent :Tjobagent;
   machineagent :Tmachineagent;
   //i :integer;
begin
   jobagent :=Tjobagent.Create;
   machineagent :=Tmachineagent.Create;
   jobagent.haha(Sender);
   form1.edit3.Text :=inttostr(machineagent.b[3]);
end;end.

解决方案 »

  1.   

    edit1 67
    edit2 ok
    edit3 av错误
      

  2.   

    楼主的代码显然无法编译:
    Tjobagent、Tmachineagent里的两个开放数组成员都是private的。楼主想玩Delphi,可暂时先改成public,运行通过了,再去考虑数据封装的问题。
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
       jobagent :Tjobagent;
       machineagent :Tmachineagent;//改成全局的才行
       //i :integer;
    begin
       jobagent :=Tjobagent.Create;
       machineagent :=Tmachineagent.Create;
       jobagent.haha(Sender);//上边的machineagent跟haha里边的不是一个阿
       form1.edit3.Text :=inttostr(machineagent.b[3]);//machineagent.b[3]根本没值
    end;
      

  4.   

    另外,我要说说楼主的这个函数:
    procedure TForm1.Button1Click(Sender: TObject);
       ...
       form1.edit3.Text :=inttostr(machineagent.b[3]);
       /// ^^^^ 这个错误是很多刚入门的Delphi程序员容易
       /// 犯的错误:
       /// 类中的方法访问了它的某个确定的实例的成员。
       /// 从面向对象的角度来看,这是绝对错误的!
       /// 由于Delphi里每个窗体对应的Unit里都定义了一个
       /// 窗体对象,比如 var Form1: TForm1;
       /// 所以楼主这样的代码运行起来似乎也没什么错误,
       /// 但从概念上,楼主这么做是错误的。
    end; 另外:如果运行中又动态创建了一个 TForm1 的对象,那么,楼主的这个
    函数的行为恐怕就,呵呵,不如楼主所想的那样了。
      

  5.   

    改成public也不行阿,我是初编程
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
       jobagent :Tjobagent;
       machineagent :Tmachineagent;//改成全局的才行
       //i :integer;
    begin
       jobagent :=Tjobagent.Create;
       machineagent :=Tmachineagent.Create;
       jobagent.haha(Sender);//上边的machineagent跟haha里边的不是一个阿
    ---> ^^^^ 错误在这!!!!!
        jobagent 并为 machineagent 里的b 分配内存。
        它只给它的一个“局部”Tmachineagent 对象的b 分配了内存。
        (由于Delphi里的对象都是在堆上的,所以,说它“局部”不太合适)
       form1.edit3.Text :=inttostr(machineagent.b[3]);//machineagent.b[3]根本没值
    end;
      

  7.   

    那我要把jobagent里数组a的值赋给machineagent里的b,并把数组b的值显示出来
    ,怎么改程序?