Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
1-99111
Srr
2002-12-18 09:17
2002.12.30
Удобное Редактирования кода программы


1-99133
kalishenko stas
2002-12-18 13:21
2002.12.30
Word


14-99330
vopros
2002-12-06 13:20
2002.12.30
Люди иногда не могу понять руссий язык


14-99266
Shuric
2002-12-11 21:51
2002.12.30
C -> Pascal


1-99157
plague
2002-12-18 17:59
2002.12.30
Стек на Паскале





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский