Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.17;
Скачать: CL | DM;

Вниз

Абстрактные методы класса   Найти похожие ветки 

 
reticon ©   (2003-11-06 23:33) [0]

Имеется некоторая процедура

DoSomething(s: string; str: TStrings);

Делаю так:

Str := TStrings.Create;

на что компилятор выдает предупреждение следующего вида

[Warning] Unit1.pas(81): Constructing instance of "TStrings" containing abstract method "TStrings.Clear"
[Warning] Unit1.pas(81): Constructing instance of "TStrings" containing abstract method "TStrings.Delete"
[Warning] Unit1.pas(81): Constructing instance of "TStrings" containing abstract method "TStrings.Insert"

Соответственно, при попытке вызова процедуры DoSomething получаем ошибку "Abstract Error".

Где грабли?


 
willys ©   (2003-11-06 23:36) [1]

TStrings - абстрактный класс. пиши Str := TStringList.Create;


 
Palladin ©   (2003-11-06 23:38) [2]

Грабли именно в абстрактных методах. Они не предназначены для прямого вызова.
И еще, какой смысл в Str:=TStrings.Create? Если параметр не возвращаемый. Никакого смысла эта конструкция за пределами процедуры не имеет. Соответственно никакого смысла объявлять str параметром тоже нет, объявляй как локальную переменную.
И еще, лучше не объявлять идентификаторы совпадающие с названиями уже существующих функций и типов. Может быть чревато последствиями. В частности путанницей или удивлением что System.Str не работает.


 
Юрий Федоров ©   (2003-11-06 23:51) [3]

str - это на самом деле Pointer, причем переданный в процедуру по значению. То есть при попытке считать его ппосле вызова DoSomething ты ничего не получишь.
Если тебя интересует этот объект снаружи, объяви его как var параметр. И не надо создавать экхемпляры абстрактных классов )))


 
Palladin ©   (2003-11-06 23:53) [4]

тьфу :) записался

> Никакого смысла эта конструкция за пределами процедуры не
> имеет.

Читать как

Никакого смысла результат работы этой конструкции за пределами процедуры не имеет.


 
reticon ©   (2003-11-07 00:27) [5]

Да, все верно, замена Str := TStrings.Create на
Str := TStringList.Create решила проблему. Спасибо :)

ЗЫ это я ковырял функцию StringToWords, взятую с
http://delphibase.endimus.ru/, если кому интересно


 
Anatoly Podgoretsky ©   (2003-11-07 08:57) [6]

Palladin © (06.11.03 23:53) [4]
Она не имеет вообще никакого смысл ни за перделами ни в ней.



Страницы: 1 вся ветка

Текущий архив: 2003.11.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
14-56915
Rouse_
2003-10-25 01:47
2003.11.17
Хотелось бы....


3-56501
Vemer
2003-10-21 12:34
2003.11.17
(Не)Работа Locate c 2-мя опциями


14-56890
VEG
2003-10-23 17:31
2003.11.17
БЕДСТВУЮ!!!


14-56842
Ru
2003-10-27 17:05
2003.11.17
Кто, что может сказать по этому поводу?


4-56945
subdigger
2003-09-24 11:32
2003.11.17
Always on top