Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
1

Создать список объектов

03.04.2015, 21:31. Показов 2990. Ответов 5
Метки нет (Все метки)

Здравствуйте.
Пытаюсь создать список объектов.
Написал такой код:
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
...
...
...
...
type
XYZ = class
public
  X: Integer;
  Y: Integer;
  Z: Integer;
  function Sets(sX,sY,sZ:Integer):Integer;
end;
 
function XYZ.Sets(sX,sY,sZ:Integer):Integer;
begin
  X := sX;
  Y := sY;
  Z := sZ;
end;
 
type
PathList = class
public
  Count_Item : Integer;
  List : array of XYZ;
  function Add(X,Y,Z:Integer):Integer;
end;
 
function PathList.Add(X,Y,Z:Integer):Integer;
var v_XYZ:XYZ;
begin
  v_XYZ.Sets(X,Y,Z);
  List[Count_Item] := v_XYZ;
  Count_Item := Count_Item + 1;
end;
 
 
function CreatePath():Integer;
var List:PathList;
var v_XYZ:XYZ;
begin
  List.Add(80363, 53769, -1586);
  //List.Add(80804, 53553, -1586);
  //List.Add(81512, 53475, -1488);
  //List.Add(82114, 53323, -1522);
  v_XYZ := List.List[0];
  print(v_XYZ.X);
end;
Выдает такую ошибку:
Line: 15, Message: Access violation at address 0262030D. Write of address 00000008
Помогите, пожалуйста
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2015, 21:31
Ответы с готовыми решениями:

Как создать список объектов?
Помогите, как можно создать список объектов, воспользовавшись TList. Задача заключается в том,...

Создать массив/список объектов и вывести
Подскажите пожалуйста как исправить код. Задание следующее: Airline: Пункт назначения, Номер...

Создать список объектов Домашние электроприборы
Задача. Создать список объектов Домашние электроприборы. Найти список кухонных приборов марки...

Создать массив объектов. Вывести список товаров
У кого-нибудь есть мысли по решению данной задачи ? Я застрял на выводе всех товаров. Не могу...

5
5027 / 3920 / 1296
Регистрация: 14.04.2014
Сообщений: 18,029
Записей в блоге: 18
03.04.2015, 21:39 2
PathList = class

var List:PathList;
begin
// вот здесь должен быть конструктор
// List:=PathList.Create;
List.Add(80363, 53769, -1586);

и, пожалуйста, возьмите в привычку следовать общепринятым соглашениям и называть классы с буквы T, тогда названия типов гораздо легче отличать от названий переменных
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
03.04.2015, 21:49  [ТС] 3
krapotkin, спасибо, это помогло.
А теперь что не так?
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
...
...
...
...
type
T_XYZ = class
public
  X: Integer;
  Y: Integer;
  Z: Integer;
  function Sets(sX,sY,sZ:Integer):Integer;
end;
 
function T_XYZ.Sets(sX,sY,sZ:Integer):Integer;
begin
  X := sX;
  Y := sY;
  Z := sZ;
end;
 
type
T_PathList = class
public
  Count_Item : Integer;
  List : array[1..5] of XYZ;
  function Add(X,Y,Z:Integer):Integer;
end;
 
function T_PathList.Add(X,Y,Z:Integer):Integer;
var v_XYZ:T_XYZ;
begin
  v_XYZ:=T_XYZ.Create;
  v_XYZ.Sets(X,Y,Z);
  List[Count_Item] := v_XYZ;
  Count_Item := Count_Item + 1;
end;
 
 
function CreatePath():Integer;
var List:T_PathList;
var v_XYZ:T_XYZ;
begin
  List:=T_PathList.Create;
  List.Add(80363, 53769, -1586);
  List.Add(80804, 53553, -1586);
  //List.Add(81512, 53475, -1488);
  //List.Add(82114, 53323, -1522);
  v_XYZ := List.List[0];
  print(v_XYZ.X);
  v_XYZ := List.List[1];
  print(v_XYZ.X);
end;
Ошибка:
Line: 33, Message: Access violation at address 0262074E. Write of address 784203F4
Добавлено через 53 секунды
Когда создаю 2ую точку(это в строке 45), на этом выдает ошибку
0
Модератор
3476 / 2600 / 740
Регистрация: 19.09.2012
Сообщений: 7,966
03.04.2015, 22:14 4
Начальное значение Count_Item где задается ?
1
5027 / 3920 / 1296
Регистрация: 14.04.2014
Сообщений: 18,029
Записей в блоге: 18
03.04.2015, 22:15 5
теперь Count_item равно не пойми чему

а если не самодеятельно, а взять готовый список объектов TObjectlist, то будет гораздо удобнее
TPathList=class(TObjectlist)
end;

а если делфи 2010 и выше, то
TPathList=class(TObjectList<T_XYZ>)
end;
то еще удобнее, тут даже не нужно приводить типы -
весь лист работает уже с типом T_XYZ - добавление, i-й элемент, удаление и т.д.
2
4232 / 2771 / 403
Регистрация: 01.06.2013
Сообщений: 5,839
Записей в блоге: 9
03.04.2015, 22:18 6
Передаём за проезд! О конструкторах-деструкторах не забываем!
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
type
 
XYZ = class
public
  X: Integer;
  Y: Integer;
  Z: Integer;
  constructor Create(sX,sY,sZ:Integer);
end;
 
PathList = class
public
  List : array of XYZ;
//  constructor Create;
  procedure Add(X,Y,Z:Integer);
  function GetCount:Integer;
  destructor Destroy; override;
end;
 
{ XYZ }
 
constructor XYZ.Create(sX, sY, sZ: Integer);
begin
  X := sX;
  Y := sY;
  Z := sZ;
end;
 
{  PathList }
 
{
constructor PathList.Create;
begin
  SetLength(List,0);
end;
}
 
procedure PathList.Add(X,Y,Z:Integer);
var
  i:Integer;
begin
  i:=GetCount;
  SetLength(List,i+1);
  List[i]:=XYZ.Create(X,Y,Z);
end;
 
function PathList.GetCount:Integer;
begin
  result:=Length(List);
end;
 
destructor PathList.Destroy;
var
  i:Integer;
begin
  for I := 0 to High(List) do
      List[i].Free;
  inherited;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  List:PathList;
  v_XYZ:XYZ;
begin
  List := PathList.Create;
  try
    List.Add(80363, 53769, -1586);
    List.Add(80804, 53553, -1586);
    List.Add(81512, 53475, -1488);
    List.Add(82114, 53323, -1522);
    v_XYZ := List.List[3];
    Caption:=FloatToStr(v_XYZ.X);  // print(v_XYZ.X);
  finally
    List.Free;
  end;
end;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2015, 22:18

Создать односвязный список из объектов заданного типа
Добрый вечер! Собственно задачка: Определить пользовательский тип, включающий в себя следующие...

Как создать список объектов класса и обращаться к их методам?
Для решения одной задачи мне нужно создать список объектов класса, но я не знаю, как это правильно...

Создать класс, содержащий список (или массив) объектов
Задание из двух частей: 1)Создать абстрактный класс Pair(пара значений) с виртуальными...

Как создать список для объектов разных типов данных
Здравствуйте, подскажите, пожалуйста, у меня есть задание: Создать базовый класс «Транспорт» и...


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

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

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