Tstrings delphi abstract error

Tstrings delphi abstract error Люди не мучайтесь, когда-то и я мучался, но мне дали хороший совет и я Вам его передаю. Люди не мучайтесь, когда-то и я мучался, но мне дали хороший совет и я Вам его передаю. С этим типом у Вас проблем станет меньше. Air, не очень хороший совет. Проблем станет меньше, […]

Содержание

  1. Tstrings delphi abstract error
  2. Tstrings delphi abstract error
  3. Tstrings delphi abstract error
  4. Tstrings delphi abstract error
  5. Tstrings delphi abstract error

Tstrings delphi abstract error

Люди не мучайтесь, когда-то и я мучался, но мне дали хороший совет и я Вам его передаю.

Люди не мучайтесь, когда-то и я мучался, но мне дали хороший совет и я Вам его передаю.

С этим типом у Вас проблем станет меньше.

Air, не очень хороший совет. Проблем станет меньше, а работы больше.

В приведенном примере еще ладно, но как думаете, в исходниках VCL почему в методах для объявления параметров используются абстрактные классы ?

Air, не очень хороший совет. Проблем станет меньше, а работы больше.

В приведенном примере еще ладно, но как думаете, в исходниках VCL почему в методах для объявления параметров используются абстрактные классы ?

Был не понят. Попробую поподробнее. Я не о посте Никки, а о Вашем совете. Сравните ответ Po4koff и Ваш.

Объявлять переменные можно и нужно абстрактного класса. А вот создавать объекты нужно используя только конкретный класс. Советовать использовать всегда только конкретные классы — это ошибка, хотя это безусловно работает. Но это как-раз та самая ошибка проектирования, которая нам так дорого обходится в дальнейшем.

Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше — для каждого конкретного класса.

То есть Ваш пример отличен и, надеюсь, у Никки все получилось, но, не в обиду будет сказано, Вашему совету «использовать всегда тип TStringList, потому что меньше проблем» следовать не нужно.

Был не понят. Попробую поподробнее. Я не о посте Никки, а о Вашем совете. Сравните ответ Po4koff и Ваш.

Объявлять переменные можно и нужно абстрактного класса. А вот создавать объекты нужно используя только конкретный класс. Советовать использовать всегда только конкретные классы — это ошибка, хотя это безусловно работает. Но это как-раз та самая ошибка проектирования, которая нам так дорого обходится в дальнейшем.

Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше — для каждого конкретного класса.

То есть Ваш пример отличен и, надеюсь, у Никки все получилось, но, не в обиду будет сказано, Вашему совету «использовать всегда тип TStringList, потому что меньше проблем» следовать не нужно.

Учитывая приведённые Вами данные, я предположил, что использование одной переменной (скажем «D») тита TStream в разных частях кода можно использовать как TFileStream и TMemoryStream.

Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше — для каждого конкретного класса.

Из этого я понял, что можно обьявить один тип TStream, а не описывать каждый, с отдельной переменной.

Источник

Tstrings delphi abstract error

Всем меньше сбоев в компиляторе, вопрос такой. Конечно глупый, но, думаю, распространенный.
Хочу использовать класс TStrings (Classes) и в следующем коде

var s: TStrings;
begin
s.LoadFromFile(«xxx.txt»);
end;

выдает ошибку «Abstract Error». Как правильно пользоваться этим классом?


Андрей Прокофьев ( 2002-09-19 12:59 ) [1]


Separator ( 2002-09-19 13:00 ) [2]


qube ( 2002-09-19 13:04 ) [3]

TStrings — абстрактный класс.


Oxy2 ( 2002-09-19 13:06 ) [4]

TStrings это абстрактный класс. Его нельзя использовать на прямую. Все его методы должны быть перекрыты в его потомках. Таких например как TStringList. Более подробно можешь прочитать в хелпе.

Источник

Tstrings delphi abstract error

вот я в процедуре объявляю переменную типа TStrings и создаю ее, мне нужно в нее загрузить строки из файла, чтобы потом этот TStrings передать параметром в другую процедуру

procedure TMainForm.FileOpenActionExecute(Sender: TObject);
var FLLChild: TLogListChild;
L: TStrings;
begin
OpenDialog.DefaultExt:=»*.llf»;
OpenDialog.Filter:=»Log list files (*.llf)|*.llf»;
OpenDialog.Options := [ofEnableSizing];
if OpenDialog.Execute then begin
try
FLLChild := TLogListChild.Create(Application);
FLLChild.Caption := OpenDialog.FileName;
try
l := TStrings.Create;
l.LoadFromFile(OpenDialog.FileName);
FLLChild.LoadFileList(L);
finally
l.Free;
end;
except
Application.MessageBox(PChar(«Error read file.»),»Error»,1);
end;
end;
end;

и при загрузке из файла у меня получается ошибка Abstract Error.
. я так понял, что эта переменная l не принадлежит форме (так чтоли?) поэтомй ошибка. Подскажите пожалуйста, как ее избежать?


MBo ( 2003-05-23 09:14 ) [1]

TStrings — абстрактный класс, и компилятор об этом пердупредить должен
l := TStrings List.Create;


Андрей ( 2003-05-23 09:24 ) [2]


Palladin ( 2003-05-23 09:26 ) [3]

да, иногда нужно обращать внимание на то что пишется внизу

Источник

Tstrings delphi abstract error

Люди не мучайтесь, когда-то и я мучался, но мне дали хороший совет и я Вам его передаю.

Люди не мучайтесь, когда-то и я мучался, но мне дали хороший совет и я Вам его передаю.

С этим типом у Вас проблем станет меньше.

Air, не очень хороший совет. Проблем станет меньше, а работы больше.

В приведенном примере еще ладно, но как думаете, в исходниках VCL почему в методах для объявления параметров используются абстрактные классы ?

Air, не очень хороший совет. Проблем станет меньше, а работы больше.

В приведенном примере еще ладно, но как думаете, в исходниках VCL почему в методах для объявления параметров используются абстрактные классы ?

Был не понят. Попробую поподробнее. Я не о посте Никки, а о Вашем совете. Сравните ответ Po4koff и Ваш.

Объявлять переменные можно и нужно абстрактного класса. А вот создавать объекты нужно используя только конкретный класс. Советовать использовать всегда только конкретные классы — это ошибка, хотя это безусловно работает. Но это как-раз та самая ошибка проектирования, которая нам так дорого обходится в дальнейшем.

Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше — для каждого конкретного класса.

То есть Ваш пример отличен и, надеюсь, у Никки все получилось, но, не в обиду будет сказано, Вашему совету «использовать всегда тип TStringList, потому что меньше проблем» следовать не нужно.

Был не понят. Попробую поподробнее. Я не о посте Никки, а о Вашем совете. Сравните ответ Po4koff и Ваш.

Объявлять переменные можно и нужно абстрактного класса. А вот создавать объекты нужно используя только конкретный класс. Советовать использовать всегда только конкретные классы — это ошибка, хотя это безусловно работает. Но это как-раз та самая ошибка проектирования, которая нам так дорого обходится в дальнейшем.

Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше — для каждого конкретного класса.

То есть Ваш пример отличен и, надеюсь, у Никки все получилось, но, не в обиду будет сказано, Вашему совету «использовать всегда тип TStringList, потому что меньше проблем» следовать не нужно.

Учитывая приведённые Вами данные, я предположил, что использование одной переменной (скажем «D») тита TStream в разных частях кода можно использовать как TFileStream и TMemoryStream.

Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше — для каждого конкретного класса.

Из этого я понял, что можно обьявить один тип TStream, а не описывать каждый, с отдельной переменной.

Источник

Tstrings delphi abstract error

Люди не мучайтесь, когда-то и я мучался, но мне дали хороший совет и я Вам его передаю.

Люди не мучайтесь, когда-то и я мучался, но мне дали хороший совет и я Вам его передаю.

С этим типом у Вас проблем станет меньше.

Air, не очень хороший совет. Проблем станет меньше, а работы больше.

В приведенном примере еще ладно, но как думаете, в исходниках VCL почему в методах для объявления параметров используются абстрактные классы ?

Air, не очень хороший совет. Проблем станет меньше, а работы больше.

В приведенном примере еще ладно, но как думаете, в исходниках VCL почему в методах для объявления параметров используются абстрактные классы ?

Был не понят. Попробую поподробнее. Я не о посте Никки, а о Вашем совете. Сравните ответ Po4koff и Ваш.

Объявлять переменные можно и нужно абстрактного класса. А вот создавать объекты нужно используя только конкретный класс. Советовать использовать всегда только конкретные классы — это ошибка, хотя это безусловно работает. Но это как-раз та самая ошибка проектирования, которая нам так дорого обходится в дальнейшем.

Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше — для каждого конкретного класса.

То есть Ваш пример отличен и, надеюсь, у Никки все получилось, но, не в обиду будет сказано, Вашему совету «использовать всегда тип TStringList, потому что меньше проблем» следовать не нужно.

Был не понят. Попробую поподробнее. Я не о посте Никки, а о Вашем совете. Сравните ответ Po4koff и Ваш.

Объявлять переменные можно и нужно абстрактного класса. А вот создавать объекты нужно используя только конкретный класс. Советовать использовать всегда только конкретные классы — это ошибка, хотя это безусловно работает. Но это как-раз та самая ошибка проектирования, которая нам так дорого обходится в дальнейшем.

Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше — для каждого конкретного класса.

То есть Ваш пример отличен и, надеюсь, у Никки все получилось, но, не в обиду будет сказано, Вашему совету «использовать всегда тип TStringList, потому что меньше проблем» следовать не нужно.

Учитывая приведённые Вами данные, я предположил, что использование одной переменной (скажем «D») тита TStream в разных частях кода можно использовать как TFileStream и TMemoryStream.

Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше — для каждого конкретного класса.

Из этого я понял, что можно обьявить один тип TStream, а не описывать каждый, с отдельной переменной.

Источник

>
Ошибка ‘Abstract Error’
, Возникает при пересылке

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему



Сообщ.
#1

,
13.12.05, 03:55

    Подскажите, плиз, в чем проблема. Вываливается «Абстрактная ошибка»…

    ExpandedWrap disabled

      procedure ListFileDir(Path: string; FileList: TStrings);

       var

         SR: TSearchRec;

       begin

         if FindFirst(Path + ‘*.*’, faAnyFile, SR) = 0 then

         begin

           repeat

             if (SR.Attr <> faDirectory) then

             begin

               if (sr.Attr and faDirectory)<>0 then FileList.Add(‘+ папка ‘+SR.Name)

               else  if (sr.Attr and faHidden)<>0 then FileList.Add(‘ — файл ‘+SR.Name+’ размер: ‘+inttostr(SR.Size)+’байт — скрытый’)

               else  if (sr.Attr and faSysFile)<>0 then FileList.Add(‘ — файл ‘+SR.Name+’ размер: ‘+inttostr(SR.Size)+’байт — системный’)

               else  FileList.Add(‘ — файл ‘+SR.Name+’ — ‘+inttostr(SR.Size));

             end;

           until FindNext(SR) <> 0;

           FindClose(SR);

         end;

       end;

      var

        subdirs: TStrings;

        separ: ‘#10’;

      if copy(sub_str,1,i-1)=’dirlist’ then

      begin

        sub_str:=copy(s,i+3,length(s)-i+3); // здесь идет значение, например ‘C:’

        subdirs:= TStrings.Create;

        ListFileDir(sub_str, subdirs);

        subdirs.Insert(0,’dirlist’+separ);  // #10 — разделитель в строке

       memStr:=  TMemoryStream.Create;

       memStr.Position:=0;

       subdirs.SaveToStream(memStr);

       memStr.Position:=0;

       Socket.SendStream(memStr);  // здесь отправляется на клиент …

      end

    … но почему то происходит ошибка ‘Abstract Error’ на стороне сервера.
    думаю, что контент не подходит для отправки…. Либо как то не так отправлять надо…


    Яичница



    Сообщ.
    #2

    ,
    13.12.05, 05:36

      Full Member

      ***

      Рейтинг (т): 43

      Замените TStrings на TStringList.

      ExpandedWrap disabled

        var

        subdirs: TStringList;

        ……………………

        subdirs:= TStringList.Create;

        ……………………………

        end

      Цитата

      … но почему то происходит ошибка ‘Abstract Error’ на стороне сервера.

      …. дык…» TStrings contains abstract methods and should not be directly instantiated.»(с)

      Сообщение отредактировано: Тестировщица — 13.12.05, 05:38

      Guru

      Rouse_



      Сообщ.
      #3

      ,
      13.12.05, 06:22

        Moderator

        *******

        Рейтинг (т): 320

        Достаточно вот этой строчки: subdirs:= TStringList.Create;

        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

        0 пользователей:

        • Предыдущая тема
        • Delphi: Сетевое программирование
        • Следующая тема

        [ Script execution time: 0,0575 ]   [ 16 queries used ]   [ Generated: 10.02.23, 04:18 GMT ]  

        TStrings *is* an abstract class. Here’s a heavily commented class
        demonstrates the reason why you would want to declare a property as the
        abstract TStrings class, but instantiate it as a non-abstract TStrings
        descendant:

        TBrianClass = class(TObject)
        private
        FItems : TStrings; { Note: TStrings, not TStringList }
        procedure SetItems(Value: TStrings);
        public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        property Items: TStrings read FItems write SetItems;
        end;

        constructor TBrianClass.Create(AOwner: TComponent);
        begin
        inherited Create(AOwner);
        {
        TStrings is an ABSTRACT class, which means it has methods
        which are declared «virtual; abstract;». Abstract methods
        are not implemented, and MUST be implemented by descendants.
        The TStrings methods which are abstract relate to the actual
        storage mechanism for the string and object values.

        Because TStrings is abstract, we MUST NOT instantiate it.
        Any statement such as FItems := TStrings.Create; will result
        in a compiler or run-time error (depending on the version of
        Delphi) because the abstract methods have not been
        implemented.

        We declared our property a TStrings, however, because we
        would like the property to be type-compatible with any
        TStrings descendant. Remember that descendant classes are
        always type-compatible with their ancestors. TStringList is
        just one example of a TStrings descendant; the VCL includes
        many others, such a TMemoStrings and TListBoxStrings.

        The reason the VCL includes the TStrings abstract class is
        to provide a common interface to a list of strings, even
        though the underlying storage mechanism of those strings is
        different from class to class. So TStringList maintains
        strings in a TList structure, while TMemoStrings uses the
        Windows API to store the strings right in the Microsoft
        Windows common memo control.

        Since we cannot instantiate the TStrings class, the next
        statement creates a TStringList instance and assigns it to
        FItems. This is OK because descendants are type-compatible
        with ancestors. This technique gives us the best of both
        worlds — the property uses the generic and abstract
        TStrings interface, and the internal class field uses the
        TStringList class, which manages the string/object storage. }

        FItems := TStringList.Create;

        end;

        destructor TBrianClass.Destroy; override;
        begin
        FItems.Free;
        inherited Destroy;
        end;

        procedure TBrianClass.SetItems(Value: TStrings);
        begin
        {
        The Value parameter can be any TStrings descendant,
        including TStringList, TMemoStrings, TListBox strings,
        etc.

        The Assign method is a special TPersistent method which
        by default does nothing but raise an exception. This
        method is virtual, which means descendant classes can
        override it to provide appropriate «copy semantics» for
        the class.

        In this case, the TStrings ancestor class overrides Assign
        and loops through the strings, copying the string/object
        pairs from the source TStrings to the destination TStrings.
        It doesn’t matter what TStrings descendant the source or
        destination are, because the Assign method uses the base
        interface methods which are implemented in the ancestor
        itself, TStrings. This is another example of why abstract
        classes are great.

        So in this case, you could assign any TStrings descendant
        to the Items property of a TBrianClass instance like this:

        BrianClass.Items := Memo1.Lines;
        BrianClass.Items := ListBox1.Items;
        BrianClass.Items := MyStringList;

        &etc.
        }
        FItems.Assign(Value);
        end;


        Форум программистов Vingrad

        Модераторы: Poseidon, Snowy, bems, MetalFan

        Поиск:

        Ответ в темуСоздание новой темы
        Создание опроса
        > Использование TStrings, появляется ошибка «Abstract error» 

        V

           

        Опции темы

        Первый
        Дата 26.8.2006, 19:50 (ссылка)
        | (нет голосов)
        Загрузка ... Загрузка …




        Быстрая цитата

        Цитата

        Новичок

        Профиль
        Группа: Участник
        Сообщений: 20
        Регистрация: 21.3.2003

        Репутация: нет
        Всего: нет

        Подскажите пожалуйста как правильно использовать TStrings?

        Есть код

        Код

        str:=TStrings.Create;
        str.LoadFromFile(FilePath.Text);  //здесь выелетает ошибка

        Что нужно сделать, чтобы все заработало?

        PM MAIL   Вверх
        volvo877
        Дата 26.8.2006, 19:59 (ссылка)
        | (нет голосов)
        Загрузка ... Загрузка …




        Быстрая цитата

        Цитата

        Эксперт
        ****

        Профиль
        Группа: Комодератор
        Сообщений: 2072
        Регистрация: 15.11.2004

        Репутация: 14
        Всего: 116

        Работать не с абстрактным классом TStrings, а с его наследником, например, TStringList:

        Код
        var str: TStringList;
        ...
        str:=TStringList.Create;
        str.LoadFromFile(FilePath.Text); // Ошибки быть не должно

        Это сообщение отредактировал(а) volvo877 — 26.8.2006, 19:59

        PM MAIL   Вверх
        Первый
        Дата 27.8.2006, 15:26 (ссылка)
        | (нет голосов)
        Загрузка ... Загрузка …




        Быстрая цитата

        Цитата

        Новичок

        Профиль
        Группа: Участник
        Сообщений: 20
        Регистрация: 21.3.2003

        Репутация: нет
        Всего: нет

        Спасибо, все работает. Но вот теперь возникает другая ошибка.

        Код

        type ETemplate = record
              ....
              Body:TStringList;
          end;

        .....

        var str: array of ETemplate;
        .....

        SetLength(str,Length(str)+1);
        str[0].Body.Create;  //  вот теперь здесь вылетает ошибка

        Что я делаю не так?  smile

        PM MAIL   Вверх
        Matematik
        Дата 27.8.2006, 16:04 (ссылка)
        | (нет голосов)
        Загрузка ... Загрузка …




        Быстрая цитата

        Цитата

        Эксперт
        ***

        Профиль
        Группа: Завсегдатай
        Сообщений: 1027
        Регистрация: 11.3.2006

        Репутация: 17
        Всего: 50

        Создается так
        str[0].Body := TStringList.Create;

        PM MAIL WWW ICQ   Вверх
        Первый
        Дата 27.8.2006, 16:08 (ссылка)
        | (нет голосов)
        Загрузка ... Загрузка …




        Быстрая цитата

        Цитата

        Новичок

        Профиль
        Группа: Участник
        Сообщений: 20
        Регистрация: 21.3.2003

        Репутация: нет
        Всего: нет

        Спасибо, это я затупил. Уже разобрался …

        PM MAIL   Вверх



















        Ответ в темуСоздание новой темы
        Создание опроса
        Правила форума «Delphi: Общие вопросы»
        SnowyMetalFan
        bemsPoseidon
        Rrader

        Запрещается!

        1. Публиковать ссылки на вскрытые компоненты

        2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

        • Литературу по Дельфи обсуждаем здесь
        • Действия модераторов можно обсудить здесь
        • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
        • Вопросы по реализации алгоритмов рассматриваются здесь
        • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи


        Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

         

        0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
        0 Пользователей:
        « Предыдущая тема | Delphi: Общие вопросы | Следующая тема »

        Понравилась статья? Поделить с друзьями:
      • Tspx ошибка слежения
      • Tsmuxer finished with error code 2
      • Tslgame exe ошибка приложения память не может быть read pubg 0x3ff36459
      • Tsl game ошибка приложения память не может быть read
      • Tsl error openvpn