Delphi - 在子例程中创建类实例时出错

时间:2015-09-05 13:57:36

标签: class delphi

Delphi XE6。我创建了一个名为TBizObject的类。这是一个非常简单的课程。 (下面的代码片段)。我有一个表格,有一个"测试"按钮。

procedure TMgtForm.Button1Click(Sender: TObject);
var
  BizObj1, BizObj2, BizObj3: TBizObj;
begin
// Test Routine
  BizObj1 := TBizObj.Create;
  BizObj2 := TBizObj.Create;
  BizObj3 := TBizObj.Create;
  CreateTest;

  BizObj1.Free;
  BizObj2.Free;
  BizObj3.Free;

end;

ASSUME CreateTest已注释掉。代码工作正常。使用CreateTest,我得到了一个AV。 createTest例程就是Create and Free。

procedure TMgtForm.CreateTest;
var
  BizObj4: TBizObj;
begin

  BizObj4.Create;
  BizObj4.Free;
end;

简而言之,我可以在主程序(即按钮/菜单)中创建我的课程,但是我没有例程,可以调用例程来创建我的课程。

当我深入研究错误时,我在fParenLine上获得AV。

// Constructor
constructor TBizObj.Create;
begin
  inherited;

  // Setup out default Values;
  fParenList := TStringList.Create;
  fUniqueWordList := TStringList.Create;
  fUniqueWordList.Sorted := True;
  fUniqueWordList.Duplicates := dupIgnore;
  fBaseWordList := TStringList.Create;
end;

我班级定义的相关部分如下。

type
  TBizObj = class(TObject)
    // Internal class field definitions - only accessible in this unit   
  private
    fIncomingName: string; // This is the name that is passed in...
    fIncomingNameLength: Integer;
    ...
    fParenList: TStringList; /// TStringList of ALL ParenthesisText, assuming last one will be City and State
    ...
     protected
    // Externally accessible fields and methods
  public
  published
    constructor Create;
    destructor Destroy; override;

应用程序编译正常...我可以创建尽可能多的BizObj,但只能在顶级例程中创建。我究竟做错了什么?

由于

1 个答案:

答案 0 :(得分:3)

BizObj4.Create;

这是错误的。创建一个这样的实例:

BizObj4 := TBizObj.Create;

请注意Button1ClickCreateTest中代码之间的区别。你在前者中是正确的,但在后者中没有。