Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];




Вниз

работа с объектами в TStringList 


perov   (2002-01-30 09:48) [0]

имеются следующие описания классов

type
tclass1 = class
f1: string;
f2: integer;
f3: pointer;
end;

tclass2=class
private
fpos: integer;
flist: tstringlist;
.....
procedure insert(a1: string; a2: integer; a3: pointer);
.....
end;

procedure tclass2.insert(a1: string; a2: integer; a3: pointer);
var
a: TClass1;
begin
a:=tclass1.create;
a.f1:=a1;
a.f2:=a2;
a.f3:=a3;
flist.items.addobject(a1, a);
end;

с этим методом проблем нет
проблема возникает в следующем коде:

var
i: integer;
s: string;
a: tclass1;
a1: string;
a2: integer;
a3: pointer;
begin
// на этом этапе значение fpos больше нуля, к примеру 10
s := ......;
i := flist.indexof(s);
if <> -1 then begin
a := flist.objects[i] as tcalss1;
a1 := a.a1; // вот тут идет глюк
a2 := a.a2; // операторы выполняются правильно, значения те, что заносил в список,
a3 := a.a3; // но при этом обнуляется значение fpos
end;
end;


из-за чего может менятся значение поля fpos??????



Digitman   (2002-01-30 10:29) [1]

а где у тебя в проблемном коде используется поле fpos ? из кода это не очевидно.
и как ты контролируешь его значение ?



perov   (2002-01-30 10:38) [2]

значение fpos используется в другом месте, а обнаружил в отладчике при пошаговом выполнении.
в переменную a3 записывается адрес метода, который затем вызывается (без проблем) и в этом методе уже и используется fpos



AlexSV   (2002-01-30 10:42) [3]

> perov

Не совсем понятно несколько моментов:
1. if <> -1 then begin
- что проверяем?
2. a := flist.objects[i] as tcalss1;
a1 := a.a1; // вот тут идет глюк
- согласно объявлению tcalss1 не имеет свойств аX
tclass1 = class
f1: string;
f2: integer;
f3: pointer;
end;



perov   (2002-01-30 10:51) [4]

>AlexSV
извиняюсь, штопор мозгов
if i<> -1 then begin
a := flist.objects[i] as tcalss1;
a1 := a.f1; // вот тут идет глюк
a2 := a.f2; // операторы выполняются правильно, значения те, что заносил в список,
a3 := a.f3; // но при этом обнуляется значение fpos
end;



AlexSV   (2002-01-30 11:12) [5]

В приведенном коде все прозрачно, так что ошибка возможно не здесь.
Если что, то пиши не email, попробую помочь. (отключаюсь до завтра, увы).



perov   (2002-01-30 11:19) [6]

но отладчик считает иначе, потому что именно на строчке a1 := a.f1 (вернее после её выполнения) обнуляется fpos



Digitman   (2002-01-30 11:19) [7]

проблемный код - это некий метод класса TClass2, надо понимать ?
приведи его полную реализацию и фрагмент кода его вызова откуда-то




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.025 c
14-42829          навичек               2001-12-24 04:22  2002.02.14  
ADO Provider потеряся


1-42772           Dimk                  2002-01-31 11:25  2002.02.14  
Как в QReport заставить таблицу печататься в несколько полос?


1-42736           Игорь                 2002-01-30 03:09  2002.02.14  
Вопрос из серии Hellow Word :)


14-42871          creepster             2001-12-19 18:54  2002.02.14  
CGI


1-42745           Timka                 2002-01-21 08:59  2002.02.14  
удаление записи изи типизированного файла