Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.014 c
14-1623
wl
2003-08-13 14:41
2003.09.01
Опять форум атаковали....


1-1387
Spawn
2003-08-16 10:44
2003.09.01
Опять Word


7-1690
mod
2003-06-17 14:01
2003.09.01
Раскладка клавиатуры


8-1513
МитяЙ2
2003-04-23 12:33
2003.09.01
Иконки в нашей жизни...


9-1270
BBear
2003-03-01 20:49
2003.09.01
procedure TForum.Destoy;





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский