代码如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;  Taa = class
    private
      Ftt:string;
    public
      constructor Create;
      property tt:string   read Ftt write Ftt;
  end;
  Tabc = class of taa;
  Tbb = class(Taa)
    public
      constructor Create;
  end;
  Tcc = class(Taa)
  public
    constructor create;
  end;
var
  Form1: TForm1;
  aa:Taa;
  bb:Tbb;
  cc:Tcc;
  procedure cde(aaaa:Taa;bbbb:Tabc);
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
   cde(bb,Tbb);
  form1.Caption:=bb.Ftt;
  //目的  form1.Caption 应该显示为bb
end;{ Tbb }constructor Tbb.Create;
begin
  inherited;
  Ftt:='bb';end;{ Tcc }constructor Tcc.create;
begin
  inherited;
  Ftt:='cc';
end;{ Taa }constructor Taa.Create;
begin
  inherited;
   Ftt:='aa';
end;
procedure cde(aaaa:Taa;bbbb:Tabc);
begin
  aaaa:=Tabc.Create;
end;
end.
执行报错,谁能帮忙改好,小弟感激不尽!!!!!!!!!!11

解决方案 »

  1.   

    Tabc,是什么类,没看见定义啊?
      

  2.   

    Tabc = class of taa;
      

  3.   

    procedure cde(aaaa:Taa;bbbb:Tabc);
    begin
      aaaa:=Tabc.Create;
    end;
    应该为
    procedure cde(aaaa:Taa;bbbb:Tabc);
    begin
      aaaa:=bbbb.Create;
    end;
    报错为:内存地址错误,
     你可以把代码复制到delphi中,自己运行就看到了
      

  4.   

    不用procedure cde(aaaa:Tbb;bbbb:Tabc);procedure TForm1.FormCreate(Sender: TObject);
    begin
    //   cde(bb,Tbb);  //这句不用。
     bb:=TBB.Create;
      form1.Caption:=bb.Ftt;
      //目的  form1.Caption 应该显示为bb
    end;
      

  5.   

    abc... 是没有意义的,尽量使用有意义的命名
    格式尽量规范起来,可以参考delphi代码标准文档
    它不是强制的,但是应该尽可能的可读,想想自己读人家不规范的代码有多郁闷
      

  6.   

    //参考如下代码
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  Taa = class
      private
        Ftt: string;
      public
        constructor Create; virtual; //<<<<<
        property tt: string read Ftt write Ftt;
      end;  Tbb = class(Taa)
      public
        constructor Create; override; //<<<<<<
      end;
      Tabc = class of taa;  Tcc = class(Taa)
      public
        constructor Create; override; //<<<<<<
      end;var
      Form1: TForm1;
      aa: Taa;
      bb: Tbb;
      cc: Tcc;procedure cde(var aaaa; bbbb: Tabc);
                 //^<<<<<<
    implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      cde(bb, Tbb);
      Caption := bb.Ftt;
    end;{ Tbb }constructor Tbb.Create;
    begin
      inherited;
      Ftt := 'bb';
    end;{ Tcc }constructor Tcc.create;
    begin
      inherited;
      Ftt := 'cc';
    end;{ Taa }constructor Taa.Create;
    begin
      inherited;
      Ftt := 'aa';
    end;procedure cde(var aaaa; bbbb: Tabc);
    begin
      Taa(aaaa) := bbbb.Create;
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~
    end;end.