Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
medium2015
0 / 0 / 0
Регистрация: 26.09.2016
Сообщений: 11
#1

Delphi и список объектов. Ошибка

20.11.2016, 16:09. Просмотров 205. Ответов 14
Метки нет (Все метки)

Здравствуйте, возникла такая проблема - по заданию нужно создать дек объектов. Я описал Next и Prev как поля класса TPiramida. При попытке обращений (T.Prev или T.Next) мне выдаёт ошибку 'Incompatible types 'rlist' and 'TPiramida''. Может я неправильно как-то описал Дек? Прошу подсказки.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
unit modulK9;
*
interface
*
uses
* Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
* Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Modul9, Vcl.StdCtrls, Vcl.Buttons;
*
type
* rlist = ^relem;
* relem = record
*
* end;
*
* TForm2 = class(TForm)
* * Edit1: TEdit;
* * Label1: TLabel;
* * Label5: TLabel;
* * Edit4: TEdit;
* * BitBtn1: TBitBtn;
* * BitBtn2: TBitBtn;
* * procedure BitBtn2Click(Sender: TObject);
* * procedure BitBtn1Click(Sender: TObject);
* private
* * { Private declarations }
* public
* * { Public declarations }
* end;
*
* TPiramida = class(TPyat)
* private
* tapofema:byte;
* Prev, Next : rlist;
* function GetApofema:byte;
* procedure SetApofema(value:byte);
* public
* constructor Create(newApofema, newStorona: byte);
*
* property apofema:byte read GetApofema write SetApofema;
*
* function Pl:real; overload;
*
*
* end;
*
* Dek = class
* private
* * Front, Back : TPiramida;
* public
* * Constructor Create;
* * Destructor Destroy;
* * Procedure AddElBeg(T:TPiramida);
* * Procedure AddElEnd(T:TPiramida);
* * Procedure DelEl;
* * Function SumPl:Double;
* end;
*
var
* Form2: TForm2;
* obj1: TPiramida;
* ObjDek:Dek;
*
*
implementation
*
*
{$R *.dfm}
*
{ TPiramida }
*
constructor TPiramida.Create(newApofema, newStorona: byte);
begin
* inherited Create(newStorona);
* tapofema:=newApofema;
end;
*
function TPiramida.GetApofema: byte;
begin
Result:=tapofema;
end;
*
function TPiramida.Pl: real;
begin
* Result:=0.5*obj.Perimetr*tapofema;
end;
*
procedure TPiramida.SetApofema(value: byte);
begin
tapofema:=value;
end;
*
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
* if (Edit1.Text='') or (Edit4.Text='') then
* * ShowMessage('Не все данные были заполнены.')
* else
* * begin
* * * obj:=TPyat.Create(StrToInt(Edit1.Text));
* * * if not assigned(objDek) then objDek:=Dek.Create;
* * * obj1:=TPiramida.Create(StrToInt(Edit1.Text),StrToInt(Edit4.Text));
* * * if Proverka = True then
* * * * objDek.AddElBeg(obj1)
* * * else
* * * * objDek.AddElEnd(obj1);
* * * Edit1.Text:='';
* * * Edit4.Text:='';
* * * close;
* * end;
end;
*
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
Edit1.Text:='';
Edit4.Text:='';
end;
*
{ Dek }
*
procedure Dek.AddElBeg(T: TPiramida);
begin
if Front = Nil then
* begin
* * Front:=T;
* * Back:=T;
* end
else
* begin
* * T.Next:=Front;
* * Front:=T;
* end;
end;
*
procedure Dek.AddElEnd(T: TPiramida);
begin
if Back = Nil then
* begin
* * Front:=T;
* * Back:=T;
* end
else
* begin
* * Back.Next:=T;
* * Back:=T;
* end;
end;
*
constructor Dek.Create;
begin
inherited Create;
Front^:=nil;
Back^:=nil;
end;
*
procedure Dek.DelEl;
Var
T:TPiramida;
begin
T:=Front;
Front:=Front.Next;
T.Free;
end;
*
destructor Dek.Destroy;
begin
while Front <> Nil do
* DelEl;
end;
*
function Dek.SumPl: Double;
Var
T:TPiramida;
Sum:Double;
begin
T:=Front;
Sum:=0;
while T<>Back do
begin
* Sum:=Sum+T.Pl;
* T:=T.Next;
end;
Result:=Sum;
end;
*
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2016, 16:09
Ответы с готовыми решениями:

Delphi и список объектов. Ошибка
Здравствуйте, возникла такая проблема - по заданию нужно создать дек объектов....

Создать список объектов
Здравствуйте. Пытаюсь создать список объектов. Написал такой код: ... ......

Классы объектов Delphi 7
Ребят, помогите. Получил задание на реализацию задачи с помощью классов...

Перетаскивание объектов в delphi 7
Подскажите пожалуста как сделать в delphi 7 чтобы можно было перетаскивать...

Перетаскивание объектов в delphi 7
у меня есть две панели TPanel и TToolBar , находятся на третьей TPanel,...

14
Nanotentacle
329 / 212 / 93
Регистрация: 20.10.2016
Сообщений: 977
20.11.2016, 16:13 #2
что такое у вас obj?

Delphi
1
obj:=TPyat.Create(StrToInt(Edit1.Text));
Может, я невнимателен, но я не вижу объявления этой переменной. Какого она типа?
0
medium2015
0 / 0 / 0
Регистрация: 26.09.2016
Сообщений: 11
20.11.2016, 16:19  [ТС] #3
Её объявление в другом модуле. Я не думаю, что она как-то связана с той ошибкой, что я получил, вот и не добавлял лишний модуль сюда. Это объект класса TPyam, который в свою очередь является метаклассом для TPiramida.
0
Nanotentacle
329 / 212 / 93
Регистрация: 20.10.2016
Сообщений: 977
20.11.2016, 17:25 #4
А на какую строку ругается? А то в угадайки играть неохота.
0
medium2015
0 / 0 / 0
Регистрация: 26.09.2016
Сообщений: 11
20.11.2016, 17:33  [ТС] #5
На каждую, где я обращаюсь к Next или Prev (Строки 128, 142, 159, 179)
0
Nanotentacle
329 / 212 / 93
Регистрация: 20.10.2016
Сообщений: 977
20.11.2016, 18:13 #6
А как вы хотите T.Next типа rlist присвоить Front типа TPiramida?
0
medium2015
0 / 0 / 0
Регистрация: 26.09.2016
Сообщений: 11
20.11.2016, 18:26  [ТС] #7
Да, в этом и заключается моя проблема. По сути, у меня должен быть Дек из объектов класса TPiramida и я не пойму немного, как мне реализовать связь между элементами и как по ним передвигаться. Отсюда и несостыковка типов.
0
Nanotentacle
329 / 212 / 93
Регистрация: 20.10.2016
Сообщений: 977
20.11.2016, 19:10 #8
Объясните подробнее какая нужна связь. Пока что я не могу понять логику ваших действий, и поэтому у меня трудности с помощью.
0
skilet82
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 4
20.11.2016, 20:39 #9
Задача такая: Есть класс TPiramida. Надо сделать так, чтобы объекты этого класса были списком. Проблема в том, что непонятно, как организовать проход по списку, или же иначе - проход по всем объектам класса.
0
medium2015
0 / 0 / 0
Регистрация: 26.09.2016
Сообщений: 11
20.11.2016, 20:45  [ТС] #10
Постановка задания звучит следующим образом:
На базе класса TPiramida (этот класс является классом-наследником класса TPyat), реализовать программу работы с динамическим списком объектов. Предусмотреть добавление, удаление и просмотр каждого элемента списка.
В реализации списка объектов и состоит моя проблема. Не совсем понятно, как это сделать
0
Nanotentacle
329 / 212 / 93
Регистрация: 20.10.2016
Сообщений: 977
21.11.2016, 03:40 #11
Думаю, речь идёт о динамическом массиве. Все сразу станет проще.
0
DenNik
Нарушитель
1791 / 1338 / 306
Регистрация: 26.07.2011
Сообщений: 7,643
21.11.2016, 16:33 #12
есть список типа TList, который как раз и предназначен для работы с Объектами. работаешь с ним как с обычным списком. все, никаких Next и Prev не нужно

Добавлено через 25 секунд
а в современных версиях есть TObjectsList<>
0
Nanotentacle
21.11.2016, 16:39
  #13

Не по теме:

DenNik, если они дженерики еще не проходили, то это вызовет у преподавателя обоснованные подозрения

0
DenNik
Нарушитель
1791 / 1338 / 306
Регистрация: 26.07.2011
Сообщений: 7,643
21.11.2016, 16:46 #14
Nanotentacle, TList! если явно не указано, что нужно именно через дин.массив. этого я не увидел

Цитата Сообщение от medium2015 Посмотреть сообщение
нужно создать дек объектов
Цитата Сообщение от medium2015 Посмотреть сообщение
Может я неправильно как-то описал Дек?
какой, #%:*№, еще Дек?!
0
Nanotentacle
329 / 212 / 93
Регистрация: 20.10.2016
Сообщений: 977
21.11.2016, 17:36 #15
DenNik, меня смущает в задании строка про добавление, удаление и получение доступа. С TList этого предусматривать не надо, все и так сделано.
0
21.11.2016, 17:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2016, 17:36

События и свойства объектов delphi
Здравствуйте , не могли бы помочь с некоторым задание , желательно подробно...

Полные название объектов в delphi 7
Как сделать так, чтобы при создании объекта давалось полное название объекта?...

Композиция классов и объектов в Delphi
Подскажите пожалуйста, как организовать использование в качестве полей данных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru