在一个类的构建器中建立对象出错(内存访问错误),代码如下。。。 ( 积分: 50 )

  • 主题发起人 主题发起人 Larruping
  • 开始时间 开始时间
L

Larruping

Unregistered / Unconfirmed
GUEST, unregistred user!
TMergerOrder = class
private
FOrderNoList: TStringList;
FADOQryCommon: TADOQuery;
FNewOrderNo: Integer;
function GetNewOrderNo: Integer;
function CheckData: Boolean;
public
constructor Create(OrderNoList: TStringList);
destructor Destroy
override;
function doMerger(var ErrorMsg: string): boolean;

property NewOrderNo: Integer read FNewOrderNo;
end;

constructor TMergerOrder.Create(OrderNoList: TStringList);
begin
inherited Create;
FOrderNoList := OrderNoList
//这里出错
FADOQryCommon := TADOQuery.Create(nil)
//注释掉上一句,这里也会出错
FADOQryCommon.Connection := dmConn.AdoCn;
end;

destructor TMergerOrder.Destroy;
begin
inherited;
if Assigned(FOrderNoList) then
FOrderNoList.Free;

if FADOQryCommon <> nil then
begin
FADOQryCommon.Close;
FADOQryCommon.Free;
end;
end;
 
反正就是在构造器中建立对象就会出错。
 
是我犯了低级错误。
 
FOrderNoList:TStringList这个就没创建
 
TMergerOrder.Create(OrderNoList: TStringList);
这里的OrderNoList(tstringlist)先建立在传进来,应该没有问题的
 
TMergerOrder.Create(var OrderNoList: TStringList)
 
楼主已经明白了所以我就不再说楼主的问题了。
to jjtl:
你说应该 TMergerOrder.Create(var OrderNoList: TStringList)。
首先我说你说的没错可以(var OrderNoList: TStringList),但是这可不是说不能(OrderNoList: TStringList)这样声明啊。
区别:var OrderNoList: TStringList,是将OrderNoList作为一个必须返回的对象进行处理。而不加var则表明不用返回,但是返回也可以。
例如在TMergerOrder.Create(OrderNoList: TStringList)声明下这句程序是可以的:
TMergerOrder.Create(TStringList.Create);,这时很显然是不需要返回对象的。
但是如果在TMergerOrder.Create(var OrderNoList: TStringList)的声明下就不行了,因为TMergerOrder.Create(TStringList.Create);很显然无法返回值。但是如果这样作:
S:=TStringList.Create;TMergerOrder.Create(S);
那么而这就完全可以了。因为在这里加不加 var ,S都是指的TStringList.Create的对象指针。
 
后退
顶部