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

Вниз

работа с объектами в 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, надо понимать ?
приведи его полную реализацию и фрагмент кода его вызова откуда-то



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

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

Наверх




Память: 0.48 MB
Время: 0.01 c
3-42683
ShaH
2002-01-17 10:08
2002.02.14
нити (threads) и базы данных (MSAccess)


1-42756
DmitryB
2002-01-31 00:20
2002.02.14
Как заполнилть таблицу?


1-42747
perov
2002-01-30 09:48
2002.02.14
работа с объектами в TStringList


7-42874
Александр А.
2001-11-06 14:36
2002.02.14
Конкретно PGM-у и Dima-k17 (и любому, кто знает) доп. вопрос о процессорах:


1-42732
KIR
2002-01-29 21:59
2002.02.14
А как теперь обновлять D6