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,但只能在顶级例程中创建。我究竟做错了什么?
由于
答案 0 :(得分:3)
BizObj4.Create;
这是错误的。创建一个这样的实例:
BizObj4 := TBizObj.Create;
请注意Button1Click
和CreateTest
中代码之间的区别。你在前者中是正确的,但在后者中没有。