自己写了一个不行,帮我写一个,多谢了!(最好给出代码) var mySample:TSample;
begin
  mySample:=TSample.Create;-->一执行到这里就会出错,为什么?
end;
类的实现如下  TSample = class (TObject)
  public
    str:TStrings;
    constructor Create;  
    destructor Destroy; override;     
  end;
constructor TSample.Create;
begin
  inherited Create; 
  str:=TStringList.Create;
end;destructor TSample.Destroy;
begin
  str.Free;
  inherited;
end;

解决方案 »

  1.   

    楼上说得对啊,直接就
    Type
     TSample=Class(TStringList)继承 TStringList 多方便
      

  2.   

    (我构想设计一个类,成员包含TStringList和其他好多东西,所以不能直接继承一个TStringList)
    我做了各最简单的例子如下,麻烦帮我看看为什么会出错。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TSample = class (TObject)
      public
        str:TStrings;
        constructor Create;  
        destructor Destroy; override;     
      end;  TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    constructor TSample.Create;
    begin
      inherited Create; 
      str:=TStringList.Create;
      str.Add('sample');
    end;destructor TSample.Destroy;
    begin
      str.Free;
      inherited;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var ss:TSample;
    begin
      ss.Create;
      ShowMessage(ss.str.Strings[0]);
      ss.Free;——————》执行玩这里后出错!!!!!!
    end;
    end.
    错误信息:
    Project Project1.exe raised exception class EStringListError with message 'List index out of bounds(12449116)'. Process stopped. Use Step  or Run to continue.
      

  3.   

    不加ss.Free;就暂时不出错,但是关闭窗口会出同样的错误
    耽搁各位一点时间,帮我解释一下啊!
      

  4.   

    destructor TSample.Destroy;
    begin
      FreeAndNil(str)   //str.Free;这样试试!
      inherited;
    end;
      

  5.   

    看错了!郁闷procedure TForm1.Button1Click(Sender: TObject);
    var ss:TSample;
    begin
      ss.Create;   //   这里应该是  ss := TSamle.Create;
      ShowMessage(ss.str.Strings[0]);
      ss.Free;——————》执行玩这里后出错!!!!!!
    end;
      

  6.   

    ss.Create??
    这创建的东西存到哪了??应当是procedure TForm1.Button2Click(Sender: TObject);
    var
      ss: TSample;
    begin
      ss :=TSample.Create;
      ShowMessage(ss.str.Strings[0]);
      ss.Free;// ——————》执行玩这里后出错!!!!!!
    end;
      

  7.   

    ss := TSamle.Create;  => ss := TSample.Create;  //笔误,希望你也是笔误
      

  8.   

    destructor TSample.Destroy;
    begin
    str.Free;
    inherited;
    end;str你定义的是TStrings,但创建的是TStringList,所以在释放时会存在错误。
    用FreeAndNil试试,如果有错,那么就用下面的语句:
    TStringList(str).Free;
      

  9.   

    menliwxj(有缘) ( ) 信誉:109    
    destructor TSample.Destroy;
    begin
    str.Free;
    inherited;
    end;str你定义的是TStrings,但创建的是TStringList,所以在释放时会存在错误。
    用FreeAndNil试试,如果有错,那么就用下面的语句:
    TStringList(str).Free;
    str定义的虽然是TStrings 但是Free的时候是会调用
    Destroy;因为Destroy被定义为虚函数,而TStringList又正确的覆盖了它,
    所以其实TStringList的Destroy实际是有被调用到的,而且TStrinList会
    在最后调用Inherted;一层层的往上调用的!