Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.01;
Скачать: CL | DM;

Вниз

Проблема определения типов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
1-1497
ossa
2003-08-18 08:41
2003.09.01
Подскажите как из 2-го модуля вывести в 1-м в Label текст.


1-1483
race1
2003-08-18 13:14
2003.09.01
tlistbox.getdata :)


14-1592
Всеволод Соловьёв
2003-08-13 22:21
2003.09.01
:)) картынка


14-1627
Dmitriy O.
2003-08-13 07:38
2003.09.01
Тупой и еще тупее


3-1354
Vladimir Bolotin
2003-07-16 20:59
2003.09.01
Обновление информации в RXLookupCombo