Delphi6 中 记录类型 赋值问题

时间:2021-10-31 17:33:20
不罗嗦,直接上程序,问题在程序后面
{/*********************************************/}
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);

type
    Temployee1 = Record     //问题是想把Record  换成 class(TObject)
    Name : String[25];
    Title : String[25];
    HourlyPayRate : Double;
end;

var
  Nano : Temployee1;
begin
  Nano.Name := 'Paul';
  Nano.Title := 'NBA球星';
  Nano.High := 1.83;

  Form1.Memo1.Text :=  Nano.Name + #13#10 + Nano.Title + #13#10 +
                       FloatToStr(Nano.High ) + 'm';

  ShowMessage(Format('%s——%s,身高 %f m',[Nano.Title,Nano.Name,Nano.High]));
  //窗口显示
  
end;
{/*************************************************************/}

上面给出的程序是可以编译通过的,我想把 Temployee1 的父类换一下,换成class(TObject),编译时会有警告:
[Warning] Temployee.pas(45): Variable 'Nano' might not have been initialized;
警告说我的变量 'Nano' 可能没有初始化,现在我不知道怎么解决,请求高手现身!

7 个解决方案

#1


类实际只是个指针
改成类的话,在使用对象之前要加上
Nano := Temployee1.Create;

#2


Record   是记录

Class  是类

根本就是DELPHI里的两套东西,


#3


引用 1 楼 cfvmario 的回复:
类实际只是个指针
改成类的话,在使用对象之前要加上
Nano := Temployee1.Create;
用你的方法试了一下,编译通过已经没有问题了。可能是我刚刚接触Delphi,但是我还有一个疑问,'.Create'它的作用是干什么的?还有就是 'Form1’ 对应的类是 class(TForm),那么Form1在使用的时候为什么不用初始化?
哈哈,分不用担心,一定会给你!

#4


引用 1 楼 cfvmario 的回复:
类实际只是个指针
改成类的话,在使用对象之前要加上
Nano := Temployee1.Create;
用你的方法试了一下,编译通过已经没有问题了。可能是我刚刚接触Delphi,但是我还有一个疑问,'.Create'它的作用是干什么的?还有就是 'Form1’ 对应的类是 class(TForm),那么Form1在使用的时候为什么不用初始化?
哈哈,分不用担心,一定会给你!

#5


Create是默认的构造方法,就是初始化这个类,是TObject里的,在调用时分配对象的空间并返回对象,但除此之外不会做任何操作
你可以自己定义这个方法在里面加入自己初始化对象的代码

这是我自己的程序,略去了部分无关内容

type
  TNormalMeasure =
  class(TMeasure)
    public constructor Create(Source: string);
    public function GetType: MeasureType; override;
    //...
  end;

implementation

constructor TNormalMeasure.Create(Source: string);
var
  s: string;
  i: integer;
begin
  s:='';
  for i:=1 to length(Source) do
    if Source[i]<>' ' then s:=s+Source[i];
  data := s;
end;

function TNormalMeasure.GetType: MeasureType;
begin
  Result := M_NORMAL;
end;
//...

#6


form其实也需要初始化,打开windows程序的.dpr就能看到初始化form的代码
Application.CreateForm(TForm1, Form1);
用这个调用了而已

#7


cfvmario
谢谢你的回答,现在我已经清楚我问的东西了,感谢你帮忙。就此结贴!

#1


类实际只是个指针
改成类的话,在使用对象之前要加上
Nano := Temployee1.Create;

#2


Record   是记录

Class  是类

根本就是DELPHI里的两套东西,


#3


引用 1 楼 cfvmario 的回复:
类实际只是个指针
改成类的话,在使用对象之前要加上
Nano := Temployee1.Create;
用你的方法试了一下,编译通过已经没有问题了。可能是我刚刚接触Delphi,但是我还有一个疑问,'.Create'它的作用是干什么的?还有就是 'Form1’ 对应的类是 class(TForm),那么Form1在使用的时候为什么不用初始化?
哈哈,分不用担心,一定会给你!

#4


引用 1 楼 cfvmario 的回复:
类实际只是个指针
改成类的话,在使用对象之前要加上
Nano := Temployee1.Create;
用你的方法试了一下,编译通过已经没有问题了。可能是我刚刚接触Delphi,但是我还有一个疑问,'.Create'它的作用是干什么的?还有就是 'Form1’ 对应的类是 class(TForm),那么Form1在使用的时候为什么不用初始化?
哈哈,分不用担心,一定会给你!

#5


Create是默认的构造方法,就是初始化这个类,是TObject里的,在调用时分配对象的空间并返回对象,但除此之外不会做任何操作
你可以自己定义这个方法在里面加入自己初始化对象的代码

这是我自己的程序,略去了部分无关内容

type
  TNormalMeasure =
  class(TMeasure)
    public constructor Create(Source: string);
    public function GetType: MeasureType; override;
    //...
  end;

implementation

constructor TNormalMeasure.Create(Source: string);
var
  s: string;
  i: integer;
begin
  s:='';
  for i:=1 to length(Source) do
    if Source[i]<>' ' then s:=s+Source[i];
  data := s;
end;

function TNormalMeasure.GetType: MeasureType;
begin
  Result := M_NORMAL;
end;
//...

#6


form其实也需要初始化,打开windows程序的.dpr就能看到初始化form的代码
Application.CreateForm(TForm1, Form1);
用这个调用了而已

#7


cfvmario
谢谢你的回答,现在我已经清楚我问的东西了,感谢你帮忙。就此结贴!