|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
20.10.2007, 13:17 | #1 |
Регистрация: 20.10.2007
Сообщений: 6
|
необходимо сделать стек на указателях с использованием ООП
Скажем необходимо сделать стек на указателях с использованием ООП... Вот вариант. Он косячный...
Описание классов: Код:
Код:
Код:
|
20.10.2007, 14:10 | #2 |
Форумчанин
Регистрация: 15.10.2007
Сообщений: 147
|
Код:
Код:
Код:
Последний раз редактировалось Maslan; 20.10.2007 в 14:45. |
21.10.2007, 08:42 | #3 |
Регистрация: 20.10.2007
Сообщений: 6
|
Спасибо, Maslan. Стек было не важно FIFO или FILO. Но у меня появился ряд вопросов:
1.Из процедуры TForm1.Button1Click(Sender: TObject): Stek.conec:=NewElem;//Здесь указателю присвоили указатель Stek.conec.inf:=Edit1.Text;//а здесь уже, по идее Stek.conec-адрес как такое возможно? 2.Почему эти записи выдают одинаковый результат? Stek.conec.inf Stek.conec^.inf 3.При необходимости освободить память мне пользоваться Dispose? Последний раз редактировалось TROXEVASIN; 21.10.2007 в 08:49. |
21.10.2007, 20:20 | #4 | |||
Форумчанин
Регистрация: 15.10.2007
Сообщений: 147
|
Цитата:
Цитата:
Цитата:
Код:
|
|||
22.10.2007, 09:47 | #5 |
Регистрация: 20.10.2007
Сообщений: 6
|
Можно ли вынести описание класса c использованием указателей в dll библиотеку?
Вопрос возник по тому что процедура работает корректно в теле программы, а если ее вынести в dll она выдает какую-то ошибку. library Classy; uses SysUtils, Classes; {$R *.res} type PRabota=^TRabota; PElement=^TElement; PStek=^TStek; TRabota = class Imya: String; no: integer; PredshRab: String; a: integer; b: integer; m: integer; SredProd: real; D: real; SKO: real; Color: byte; next: PRabota; Stek: PStek; end; TElement = class AdrRab:PRabota; next:PElement; end; TStek = class Home: PElement; Position: PElement; end; TList = class Home: PRabota; end; procedure RabotaADD(Imyae,PredshRabe:string;n oe,ae,be,me:integer;List:TList); stdcall; Var Rab:PRabota; begin if List.Home=nil then //Свежесозданный и будет Началом begin New(Rab); Rab^:=TRabota.Create; Rab.Color:=0; Rab.Imya:=Imyae; Rab.no:=noe; Rab.PredshRab:=PredshRabe; Rab.a:=ae; Rab.b:=be; Rab.m:=me; Rab.SredProd:=(ae+4*me+be)/6; Rab.SKO:=(be-ae)/6; Rab.D:=Sqr(Rab.SKO); List.Home:=Rab; List.Home.next:=nil; end else //Свежесозданный встает в конец Стека используем FIFO begin Rab:=List.Home; while Rab.next<>nil do Rab := Rab.next; New(Rab.next); Rab.next^ := TRabota.Create; Rab.next.next:=nil; Rab.next.Color:=0; Rab.next.Imya:=Imyae; Rab.next.no:=noe; Rab.next.PredshRab:=PredshRabe; Rab.next.a:=ae; Rab.next.b:=be; Rab.next.m:=me; Rab.next.SredProd:=(ae+4*me+be)/6; Rab.next.SKO:=(be-ae)/6; Rab.next.D:=Sqr(Rab.next.SKO); end; end; exports RabotaADD; begin end. Последний раз редактировалось TROXEVASIN; 22.10.2007 в 09:52. |
22.10.2007, 09:53 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Какую ошибку и на какой строке?
И еще переназови свой TList по другому, ибо такой клас уже определен в Classes и могут быть баги И еще нескромный вопрос зачем тебе использовать именно указатели на класс? почему переменную Next не сделать типа Trabota ведь это все равно станет указателем.
I'm learning to live...
Последний раз редактировалось Stilet; 22.10.2007 в 09:59. |
22.10.2007, 11:05 | #7 |
Форумчанин
Регистрация: 15.10.2007
Сообщений: 147
|
Пока не понятно, что за ошибка....
Может ругается на то, что передаваемый ей TList в основной проге не определён? Код:
Последний раз редактировалось Maslan; 22.10.2007 в 11:09. |
22.10.2007, 11:16 | #8 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Маслан, ты не верно тестишь.
А автора этот код в ДЛЛ прописан. и ошибка возникает из-за того скорее всего что в ДЛЛ тип TList определен так а в прокте, в котором автор вызывает свою процедуду TList определен по другому. Еще раз попрошу автора перечитать мой предидуший пост внимательно.
I'm learning to live...
|
22.10.2007, 11:23 | #9 | |||
Форумчанин
Регистрация: 15.10.2007
Сообщений: 147
|
Цитата:
Я же Цитата:
Цитата:
|
|||
22.10.2007, 11:43 | #10 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
I'm learning to live...
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
необходимо сделать несколько документов: акт, счет и т.п. | Kisunya2104 | Microsoft Office Excel | 5 | 17.05.2009 18:35 |
про СТЕК | anco | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 06.07.2008 22:29 |
Стек | Еленка | Помощь студентам | 2 | 06.06.2008 18:58 |
Стек | Foky | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 13.05.2008 18:39 |
Стек | Dr.zlo | Работа с сетью в Delphi | 6 | 09.07.2007 07:59 |