Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
ВнизПроблема определения типов Найти похожие ветки
← →
Kallega (2003-08-19 15:33) [0]Есть тип-запись
type
TDayWork=record
dwDay:Word;
dwMonth:Word;
end;
Необходимо объявить тип-множество переменных типа TDayWork:
type
TSetDayWork=set of DayWork;
Тип TDayWork описан в одном модуле, а TSetDayWork - в другом.
При этом компиллятор выдаёт ошибку Undeclared identifier: "DayWork"
В чём проблема?
← →
Skier (2003-08-19 15:37) [1]
> Необходимо объявить тип-множество переменных типа TDayWork:
Зря ты это затеял...
← →
Cr@zy-EyE (2003-08-19 15:44) [2]Unit1 не использует Unit2 или использует, но в секции implementation, а т.к. тип объявляется в секции interface, то юзать его нужно там:
unit Unit1
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Unit2;
← →
Kallega (2003-08-19 16:01) [3]Я как раз так и делаю: Unit2 у иеня в интерфейсной части Unit1,
а тип TDayWork - в интерфейсной части Unit2
← →
ermserg (2003-08-19 16:03) [4]A DayWork gde? I chto eto. Pravilno compilyator govorit - tip ne opisan. Chto ti voobsche sdelat pitayeshsa?
← →
jack128 (2003-08-19 16:30) [5]set of <Type>
<Type> должен быть перечисляемым типом. Запись таковым не является..
← →
Kallega (2003-08-19 16:51) [6]Ладно, напишу полностью о поставленной задаче.
Эту простейшую, казалось, программку я пишу для друзей. На форме будет календарь. Пользователь будет нажимать на день в календаре, а программа будет говорить, работаю я или нет в этот день, и, если да, то днём или вечером. Т.к. график работы скользящий, то я не могу просто сделать множество DaySet, где, к примеру, будут храниться только даты моего пребывания на работе. Тем более, что месяц-то не один, а их много. Можно было бы сделать по множеству на каждый месяц (TSetDaysAugust, TSetDaysSeptember,....), но это же не оптимально и просто глупо. Поэтому я решил сделать запись - одно поле будет отвечать за число, а второе - за месяц. В этом случае нужно всего одно множество, но множество записей.
← →
Skier (2003-08-19 16:56) [7]>Kallega (19.08.03 16:51) [6]
А это не устроит ?
1)
type
TDayWork=record
dwDay:Word;
dwMonth:Word;
end;
PDayWork = ^TDayWork
2) Пишешь потомок класса TList и в нём делаешь
элемент списка - PDayWork
← →
KSergey (2003-08-19 17:00) [8]Kallega (19.08.03 16:51)
Э, а при чем тут тогда "множество"? ;)
Тут нужен динамический массив записей - вот и все. Множества тут ни при чем совершенно.
← →
Kallega (2003-08-19 17:11) [9]Таким оразом получается тип-указатель на структуру.
Насколько я помню, TList позволяет хранить объекты разных типов. Т.е. если сделать так:
type
TDayWork=record
dwDay:Word;
dwMonth:Word;
end;
PDayWork = ^TDayWork
var DayWork:PDayWork;
то так я смогу инициализировать список:
List1.Items[i].dwDay:=19;//19-ое
List1.Items[i].dwMonth:=8;//августа
Зачем писать потомок?
← →
Palladin (2003-08-19 17:12) [10]Ну человек наверно посчитал, что множество, это типа от слова "много".
← →
Johnmen (2003-08-19 17:14) [11]Достаточно
dwDay:byte;
dwMonth:byte;
← →
Skier (2003-08-19 17:20) [12]>Kallega (19.08.03 17:11) [9]
> Насколько я помню, TList позволяет хранить объекты разных
> типов.
Вот как раз эту отличную возможность ты и можешь использовать
в своих целях
> то так я смогу инициализировать список:
var
DayWork:PDayWork;
AList : TDayWorkList; //потомок TList-a
begin
//..........
New(DayWork);
with DayWork^ do begin
dwDay:=19;//19-ое
dwMonth:=8;//августа
end; //with
AList.Add(DayWork);
//..........
end;
> Зачем писать потомок?
1)Затем чтобы элементы были типизированы (PDayWork)
2)При изменении логики твоей программы ты просто будет добавлять
методы к своему потомку. Просто, удобно и всё в одном месте...
3) ООП подучишь.
← →
Kallega (2003-08-19 17:21) [13]>Достаточно
dwDay:byte;
dwMonth:byte;
Не понял.
>>Ну человек наверно посчитал, что множество, это типа от слова "много".
Всё правильно я понял.
Чуть ошибся:
то так я смогу инициализировать список:
List1.Add(DayWork);
List1.Items[i].dwDay^:=19;//19-ое
List1.Items[i].dwMonth^:=8;//августа
← →
Kallega (2003-08-19 17:24) [14]>> то так я смогу инициализировать список:
var
DayWork:PDayWork;
AList : TDayWorkList; //потомок TList-a
begin
//..........
New(DayWork);
with DayWork^ do begin
dwDay:=19;//19-ое
dwMonth:=8;//августа
end; //with
AList.Add(DayWork);
//..........
end;
Спасибо, вроде, понял.
>3) ООП подучишь.
Подучу!
← →
Palladin (2003-08-19 17:28) [15]
> Всё правильно я понял.
Ты уверен?
Тебе не ооп учить надо (его кстати не учат, а изучают), а матчасть.
← →
KSergey (2003-08-19 17:31) [16]Только не забудьте память освободить после New!!!!!
См. пример из хелпа к TList.Items
← →
KSergey (2003-08-19 17:31) [17]Palladin
Да ладно, остыньте! Жизнь прекрасна! ;)
← →
Kallega (2003-08-19 17:37) [18]>KSergey ©
Ещё раз спасибо
← →
Calm (2003-08-19 17:39) [19]
> Palladin © (19.08.03 17:12) [10]
> Ну человек наверно посчитал, что множество, это типа от
> слова "много".
Не поверишь, но "множество" действительно происходит от слова "много" :))
← →
Palladin (2003-08-19 17:51) [20]верю, чесно верю...
но-таки "множество", "массив" и "список" есть понятия различные... и не стоит доверять слову "много"
← →
pasha_golub (2003-08-19 18:22) [21]2Palladin
А еще есть очередь, стек и дерево :-)) Их тоже много
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.017 c