TStrings是一个抽象对象,永远不能被实例话,所以当然不会出警告了。
要么换成TStringList试试。

解决方案 »

  1.   

    TStrings对象的方法都没有具体实现,使用时要用TStringList来把她实例化,var
       a:TStrings;
    begin
       a:=TStringList.Create;
    end
      

  2.   

    如何初始化:1. 直接赋空值: Strings1 := nil;
    2. 用一个可实例化的(非抽象的)TStrings的子类创建实例,如TStringList: Strings1 := TStringList.Create;
      

  3.   

    1. 直接赋空值: Strings1 := nil;
    这种方法虽然初始化了,但是因为它指向一个空地址,所以不能使用这个实例;
    2. 用一个可实例化的(非抽象的)TStrings的子类创建实例,如TStringList: Strings1 := TStringList.Create;
    这种方法才是真正创建了一个可用的实例!
      

  4.   

    各位大虾,delphi里还有多少这样的抽象类呀?
      

  5.   

    如果是这样的话,我直接把tstrings的变量声明成tstringlist,是不是更好呢?
      

  6.   

    很多,比如TDataset。抽象类又没什么可怕。
      

  7.   

    TStrings有TStrings的道理,不过你声明成TStringList也可以。
    等你明白了面向对象的方法后,不用人提醒,你都会自觉使用TStrings的。
      

  8.   

    chechy能不能说的详细点?
      

  9.   

    这个属于面向对象的概念,正因为面向对象,才会出现抽象类。这个不是一句两句能讲清楚地,你今后慢慢再编程中体会吧。
    就如
    var
      a: TForm;
      b: TForm1;
    begin
      b := TForm1.Create(nil);
      a := b; // 赋值成立
      b := a; // 赋值不成立,编译器报错
    你慢慢体会吧。
      

  10.   

    to chechy: 真是高手。能不能用面向对象的原理解释一下。我再加分。
      

  11.   

    面向对象三大特征:封装、继承、多态。封装最简单,没什么花头。最难理解和领悟的是多态,功能最强大的也是多态。当然,没有继承,也就没有多态。
    你的这个问题是继承方面的问题。我总感觉面向对象不是一下就能学会的,我大三接触C++时,认为C++没什么,用C都能做。到大四才意识到面向对象的重要性了,而对多态的领悟则是工作后两年。所以我觉得这是一个比较漫长的过程,况且我即使说,也不会说全的,有些东西没有碰见特定的情况,根本就蹦不出来(你有这种体会吗?)。
      

  12.   

    var
      a:TStrings;
    begin
      a:=TStringList.Create;
    end