Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
ВнизTObjectList Найти похожие ветки
← →
vladnt (2002-12-19 14:53) [0]Всем добрый день. В проге использую(вернее пытаюсь) TObjectList и что-то я ,наверное, не так понимаю.Подскажите,please, в чем моя ошибка.
Приблезительно это выглядит так:
type
TMyClass=class
public z:short;
end;
var MyList:TObjectList;
procedure AddMyList (tz:short);
var
TempMyClass:TMyClass;
begin
TempMyClass:=TMyClass.Create;
TempMyClass.z:=tz;
MyList.Add(TempMyList);
TempMyClass.free;
end;
procedure Main;
var
i:short;
TempMyClass:TMyClass;
begin
MyList:=TObjectList.Create(true);
for i:=0 to 10 do AddMyList(i);
.....
TempMyClass:=TMyClass.Create;
for i:=0 to MyList.Count-1 do
begin
TempMyClass:=MyList.Items[i];
.....
end;
TempMyClass.Free;
MyList.Free;
end;
← →
Юрий Федоров (2002-12-19 14:55) [1]MyList.Add(TempMyList);
TempMyClass.free;
Вторая строка совсем лишняя
← →
vladnt (2002-12-19 15:03) [2]выдает ошибку на строке TempMyClass:=MyList.Items[i] :
Incompatible types: "TMyClass" and "TObject"
← →
han_malign (2002-12-19 15:11) [3]нужно прямое приведение типа, плюс у тебя косяки
procedure AddMyList (tz:short);
var
TempMyClass:TMyClass;
begin
TempMyClass:=TMyClass.Create;
TempMyClass.z:=tz;
MyList.Add( TObject(TempMy Class{List}));
//TempMyClass.free; убиваешь хранимый в List-е объект
end;
procedure Main;
var
i:short;
TempMyClass:TMyClass;
begin
MyList:=TObjectList.Create(true);
for i:=0 to 10 do AddMyList(i);
.....
//TempMyClass:=TMyClass.Create; зачем тебе 12-тый экземпляр, указатель на который ты теряешь ниже
for i:=0 to MyList.Count-1 do
begin
TObject(TempMyClass):=MyList.Items[i];
.....
end;
//TempMyClass.Free; все экземпляры убиваются List-ом, не зря же ты TObjectList.Create( true) делал
MyList.Free;
end;
З.Ы. TempMyClass:TMyClass - это указатель на экземпляр, в список помещается именно указатель, так как список не может знать принцип копирования дынных из объекта в объект(про TPersistent грузить не буду - здесь это не надо).
← →
han_malign (2002-12-19 15:16) [4]З.З.Ы. AddMyList - делается проще
TMyClass = class
.............
public
constructor Create(aZ: integer);
.............
end;
constructor TMyClass.Create(aZ: integer);
begin
z:=aZ;
end;
................
for i:=0 to 10 do MyList.Add(TObject(TMyClass.Create(i)));
← →
han_malign (2002-12-19 15:22) [5]Это не твой-ли косяк я вчера в Потрепаться обмусоливал ("Почему всегда 10 выдает")?
У меня минут пять ушло на то, чтобы понять почему на падает, но зато потом до вечера в восторге был - просто классический пример для изучения соглашений компилятора при предаче параметров в методах класса.
← →
vladnt (2002-12-19 15:39) [6]han_malign
Косяк не мой,этим не балуюсь (предпочитаю спиртное):))
За помощь большое спасибо. До кучи еще вопросик можно: нужно отсортировать по z. TObjectList.Sort() с этим справиться?
← →
han_malign (2002-12-19 16:00) [7]function MyClassCompare(Item1, Item2: Pointer): Integer;
begin
Result:=TMyClass(Item1).z-TMyClass(Item2).z;
end;
............
MyList.Sort(MyClassCompare);
← →
vladnt (2002-12-19 16:35) [8]han_malign
Здорово!Все работает! Спасибо! Да еще, я думаю,что все-таки Рэндел Шварц был не прав, особенно по поводу лени.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c