我定义了一个类,包括一个属性, 为什么在程序退出是报错呢?(100分)

  • 主题发起人 主题发起人 DaChu
  • 开始时间 开始时间
D

DaChu

Unregistered / Unconfirmed
GUEST, unregistred user!
type
TTest = class
private
g_s: String;
procedure setValue(s: String);
function getValue(): String;
public
property myValue: String read g_s write setValue;
end;

implementation

{ TTest }

function TTest.getValue: String;
begin
Result := g_s;
end;

procedure TTest.setValue(s: String);
begin
g_s := s;
end;
----------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
test: TTest;
begin
test.myValue := 'this is test value';
showMessage(test.myValue);
end;

--------------------
E能够正常运行,但在程序退出时报错
Exception EAccessViolation in model Project1.exe at 000194DA
为什么呀? 谢谢
 
屏蔽 function getValue(): String
这个函数应该就好了
 
var
test: TTest
begin
//先分配空间,如果没有覆写Create你使用的是TObject.Create分配
test:=ttest.create;
//系统建立了VMT,你可以使用VMT的指针找到相关的属性。
test.myValue := 'this is test value';
showMessage(test.myValue)

//释放空间,没有覆写,直接析构。
test.Destroy;
end;
//你的代码改写为如下,测试通过。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TTest = class
private
g_s: String;
procedure setValue(s: String);
function getValue(): String;
public
property myValue: String read g_s write setValue;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

{ TTest }

function TTest.getValue: String;
begin
Result := g_s;
end;

procedure TTest.setValue(s: String);
begin
g_s := s;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
test: TTest;
begin
test:=TTest.Create;
test.myValue := 'this is test value';
showMessage(test.myValue);
test.Destroy;
end;

end.
 
蓝叶菱 说的对,我没有看清楚代码,不好意思!
 
自己设计的类中如果有数据成员,在用时,必须先创建,后调用,如果没有数据成员,只是封装了一些函数或过程,那就不用创建了,可以直接调用
 
蓝大虾啊[:D]
 
后退
顶部