下面源代码编译出错,应如何修改。
谁解决的分数全送。谢谢!unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;type
  THtmlType=(BCEdit,BCPassEdit,BCListBox);
  TMemberField=class(TPersistent)
    public
      CnName:string;
      EnName:string;
      JapName:string;
      HtmlType:THtmlType;      procedure Assign(Source: TPersistent);override;
      constructor Create();
      destructor Destroy();override;
  end;  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  TMemberList=class(TPersistent)
    private
      FMember:array of TMemberField;
      function GetMember(index: integer): TMemberField;
      function GetMemberCount: integer;
      procedure SetMember(index: integer; const Value: TMemberField);    public       property Member[index:integer]:TMemberField read GetMember write SetMember;
       property MemberCount:integer read GetMemberCount;
       procedure WriteMember();
       procedure AddMemer(const AMember:TMemberField);
       constructor Create();
       destructor Destroy();override;
    end;
var
  Form1: TForm1;
  MemberList:TMemberList;implementation{$R *.dfm}procedure TMemberField.Assign(Source: TPersistent);
begin
  if (Source is TMemberField) then
  begin
    CnName:=(Source as TMemberField).CnName;
    EnName:=(Source as TMemberField).EnName;
    JapName:=(Source as TMemberField).JapName;
    HtmlType:=(Source as TMemberField).HtmlType;  end;
end;constructor TMemberField.Create();
begin
  inherited Create;
  CnName:='';
  EnName:='';
  JapName:='';
end;
destructor TMemberField.Destroy();
begin
  inherited Destroy;
end;
function TMemberList.GetMember(index: integer): TMemberField;
begin
  if (Index>-1) and (Index<MemberCount) then
    Result:=FMember[Index];
end;function TMemberList.GetMemberCount: integer;
begin
  Result:=Length(FMember);
end;procedure TMemberList.SetMember(index: integer; const Value: TMemberField);
begin
   if (Index>-1) and (Index<MemberCount) then
    FMember[Index]:=Value;
end;constructor TMemberList.Create();
begin
  inherited Create;
  SetLength(FMember,0);end;destructor TMemberList.Destroy();
var
  i:integer;
begin
  for i:=0 to MemberCount-1 do
    Member[i].Free;
  SetLength(FMember,0);
  inherited Destroy;
end;procedure TMemberList.WriteMember();
var
  i:integer;
  LstItem:TListItem;
begin
  with Form1 do
  begin
    For i:=0 to Membercount-1 do
    begin
      LstItem:=ListView1.Items.Add;
      LstItem.Caption :=Member[i].CnName;
      LstItem.SubItems.Add(MemBer[i].EnName);
      LstItem.SubItems.Add(Member[i].JapName);
      Case Member[i].HtmlType of
        BcEdit:LstItem.SubItems.Add('单行文本框 (EDIT)');
        BCPASSEdit:LstItem.SubItems.Add('密码框 (PASSEDIT)');
        BCListBox:LstItem.SubItems.Add('列表框 (LISTBOX)');
      end;
    end;
  end;
end;procedure TMemberList.AddMemer(const AMember:TMemberField);
begin
  SetLength(FMember,Membercount+1);
  Member[Membercount-1]:=TMemberField.Create;
  Member[membercount-1].Assign(AMember);
end;procedure TForm1.FormShow(Sender: TObject);
begin
  MemberList.WriteMember();
end;procedure TForm1.Button1Click(Sender: TObject);
var
  AMemberField:TMemberField;
begin
  AMemberField.CnName:=Edit1.Text;
  AMemberField.EnName:=Edit2.Text;
  AMemberField.JapName:=Edit3.Text;
end;end.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      AMemberField:TMemberField;
    begin
      AMemberField.CnName:=Edit1.Text;
      AMemberField.EnName:=Edit2.Text;
      AMemberField.JapName:=Edit3.Text;
      AddMember(AMemberField);
    end;在线等待
      

  2.   

    var
      AMemberField:TMemberField;
    这里,你定义了一个AMemberField:TMemberField;对象,但是没有创建它就还是引用了begin
      AMemberField:=TMemberField.create(self);//加上这句就可以了
      AMemberField.CnName:=Edit1.Text;
      AMemberField.EnName:=Edit2.Text;
      AMemberField.JapName:=Edit3.Text;
      

  3.   

    出错在 Result:=Length(FMember); 这行代码
    出错信息为 Access violation at address 0045CB48 in module"project1.exe".Read of address 00000004.
    谢谢各位指教。
      

  4.   

    出错在 Result:=Length(FMember); 这行代码
    出错信息为 Access violation at address 0045CB48 in module"project1.exe".Read of address 00000004.
     快帮忙啊
      

  5.   

    1.MemberList未创建就调用, WriteMember()
    procedure TForm1.FormShow(Sender: TObject);
    begin
      //MemberList := TMemberList.Create;
      MemberList.WriteMember();
    end;2.AMemberField未创建就引用它的属性
    procedure TForm1.Button1Click(Sender: TObject);
    var
      AMemberField:TMemberField;
    begin
      //AMemberField := TMemberField.Create;
      AMemberField.CnName:=Edit1.Text;
      AMemberField.EnName:=Edit2.Text;
      AMemberField.JapName:=Edit3.Text;
    end;3. MemberList和AMemberField都没有释放例程
      

  6.   

    fmember没有初始化吧,在 TMemberList.Create();中要把fmember初始化,也就是设定数组长度。
      

  7.   

    to dbExpress(蓦然回首,那人却在灯火阑珊处) 
    还是出错。
      

  8.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;type
      THtmlType=(BCEdit,BCPassEdit,BCListBox);
      TMemberField=class(TPersistent)
        public
          CnName:string;
          EnName:string;
          JapName:string;
          HtmlType:THtmlType;      procedure Assign(Source: TPersistent);override;
          constructor Create();
          destructor Destroy();override;
      end;  TForm1 = class(TForm)
        ListView1: TListView;
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        procedure FormShow(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      TMemberList=class(TPersistent)
        private
          FMember:array of TMemberField;
          function GetMember(index: integer): TMemberField;
          function GetMemberCount: integer;
          procedure SetMember(index: integer; const Value: TMemberField);    public       property Member[index:integer]:TMemberField read GetMember write SetMember;
           property MemberCount:integer read GetMemberCount;
           procedure WriteMember();
           procedure AddMemer(const AMember:TMemberField);
           constructor Create();
           destructor Destroy();override;
        end;
    var
      Form1: TForm1;
      MemberList:TMemberList;implementation{$R *.dfm}procedure TMemberField.Assign(Source: TPersistent);
    begin
      if (Source is TMemberField) then
      begin
        CnName:=(Source as TMemberField).CnName;
        EnName:=(Source as TMemberField).EnName;
        JapName:=(Source as TMemberField).JapName;
        HtmlType:=(Source as TMemberField).HtmlType;  end;
    end;constructor TMemberField.Create();
    begin
      inherited Create;
      CnName:='';
      EnName:='';
      JapName:='';
    end;
    destructor TMemberField.Destroy();
    begin
      inherited Destroy;
    end;
    function TMemberList.GetMember(index: integer): TMemberField;
    begin
      if (Index>-1) and (Index<MemberCount) then
        Result:=FMember[Index];
    end;function TMemberList.GetMemberCount: integer;
    begin
      Result:=Length(FMember);
    end;procedure TMemberList.SetMember(index: integer; const Value: TMemberField);
    begin
       if (Index>-1) and (Index<MemberCount) then
        FMember[Index]:=Value;
    end;constructor TMemberList.Create();
    begin
      inherited Create;
      SetLength(FMember,0);
      MemberList:=TMemberList.Create ;end;destructor TMemberList.Destroy();
    var
      i:integer;
    begin
      for i:=0 to MemberCount-1 do
        Member[i].Free;
      SetLength(FMember,0);
      MemberList.Destroy;
      inherited Destroy;
    end;procedure TMemberList.WriteMember();
    var
      i:integer;
      LstItem:TListItem;
    begin
      if MemberCount<1 then Exit;
      with Form1 do
      begin
        For i:=0 to Membercount-1 do
        begin
          LstItem:=ListView1.Items.Add;
          LstItem.Caption :=Member[i].CnName;
          LstItem.SubItems.Add(MemBer[i].EnName);
          LstItem.SubItems.Add(Member[i].JapName);
          Case Member[i].HtmlType of
            BcEdit:LstItem.SubItems.Add('单行文本框 (EDIT)');
            BCPASSEdit:LstItem.SubItems.Add('密码框 (PASSEDIT)');
            BCListBox:LstItem.SubItems.Add('列表框 (LISTBOX)');
          end;
        end;
      end;
    end;procedure TMemberList.AddMemer(const AMember:TMemberField);
    begin
      SetLength(FMember,Membercount+1);
      Member[Membercount-1]:=TMemberField.Create;
      Member[membercount-1].Assign(AMember);
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      MemberList.WriteMember();
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      AMemberField:TMemberField;
    begin
      AMemberField:=TMemberField.Create ;
      AMemberField.CnName:=Edit1.Text;
      AMemberField.EnName:=Edit2.Text;
      AMemberField.JapName:=Edit3.Text;
      MemberList.AddMemer(AMemberField);
      AMemberField.Destroy;
    end;end.
      

  9.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;type
      THtmlType=(BCEdit,BCPassEdit,BCListBox);//HTML编辑框类型
      TMemberField=class(TPersistent)//字段类型
        public
          CnName:string;
          EnName:string;
          JapName:string;
          HtmlType:THtmlType;      procedure Assign(Source: TPersistent);override;
          constructor Create();
          destructor Destroy();override;
      end;  TForm1 = class(TForm)
        ListView1: TListView;
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        procedure FormShow(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      TMemberList=class(TPersistent)
        private
          FMember:array of TMemberField;
          function GetMember(index: integer): TMemberField;
          function GetMemberCount: integer;
          procedure SetMember(index: integer; const Value: TMemberField);    public       property Member[index:integer]:TMemberField read GetMember write SetMember;
           property MemberCount:integer read GetMemberCount;       procedure WriteMember();
           procedure AddMemer(const AMember:TMemberField);       constructor Create();
           destructor Destroy();override;
        end;
    var
      Form1: TForm1;
      MemberList:TMemberList;implementation{$R *.dfm}procedure TMemberField.Assign(Source: TPersistent);
    begin
      if (Source is TMemberField) then
      begin
        CnName:=(Source as TMemberField).CnName;
        EnName:=(Source as TMemberField).EnName;
        JapName:=(Source as TMemberField).JapName;
        HtmlType:=(Source as TMemberField).HtmlType;  end;
    end;constructor TMemberField.Create();
    begin
      inherited Create;
      CnName:='';
      EnName:='';
      JapName:='';
    end;
    destructor TMemberField.Destroy();
    begin
      inherited Destroy;
    end;
    function TMemberList.GetMember(index: integer): TMemberField;
    begin
      if (Index>-1) and (Index<MemberCount) then
        Result:=FMember[Index];
    end;function TMemberList.GetMemberCount: integer;
    begin
      Result:=Length(FMember);
    end;procedure TMemberList.SetMember(index: integer; const Value: TMemberField);
    begin
       if (Index>-1) and (Index<MemberCount) then
        FMember[Index]:=Value;
    end;constructor TMemberList.Create();
    begin
      inherited Create;
      SetLength(FMember,0);
      MemberList:=TMemberList.Create ;end;destructor TMemberList.Destroy();
    var
      i:integer;
    begin
      for i:=0 to MemberCount-1 do
        Member[i].Free;
      SetLength(FMember,0);
      MemberList.Destroy;
      inherited Destroy;
    end;procedure TMemberList.WriteMember();
    var
      i:integer;
      LstItem:TListItem;
    begin
      if MemberCount<1 then Exit;
      with Form1 do
      begin
        For i:=0 to Membercount-1 do
        begin
          LstItem:=ListView1.Items.Add;
          LstItem.Caption :=Member[i].CnName;
          LstItem.SubItems.Add(MemBer[i].EnName);
          LstItem.SubItems.Add(Member[i].JapName);
          Case Member[i].HtmlType of
            BcEdit:LstItem.SubItems.Add('单行文本框 (EDIT)');
            BCPASSEdit:LstItem.SubItems.Add('密码框 (PASSEDIT)');
            BCListBox:LstItem.SubItems.Add('列表框 (LISTBOX)');
          end;
        end;
      end;
    end;procedure TMemberList.AddMemer(const AMember:TMemberField);
    begin
      SetLength(FMember,Membercount+1);
      Member[Membercount-1]:=TMemberField.Create;
      Member[membercount-1].Assign(AMember);
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      MemberList.WriteMember();
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      AMemberField:TMemberField;
    begin
      AMemberField:=TMemberField.Create ;
      AMemberField.CnName:=Edit1.Text;
      AMemberField.EnName:=Edit2.Text;
      AMemberField.JapName:=Edit3.Text;
      MemberList.AddMemer(AMemberField);
      AMemberField.Destroy;
    end;end.大家快来帮帮忙啊。