Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Объявление структур по-русски :)


Riply ©   (2007-07-13 07:26:00) 

Здрвствуйте !
Помогите, пожалуйста, с определением "пересекающихся" рекордов:

type
TPuperType = record
 Super: TSuperType;
end;

type
TSuperType = record
 Puper: TPuperType;
 Field: VOID;
end;


и поле Field - оно принадлежит TSuperType (тогда какой у него тип ?)
или это просто сообщение, что после TSuperType идет некий Field
и его размер не учитывается в размере TSuperType?


Riply   (2007-07-13 09:05:00) [1]

Спасибо всем огромное !

> [19] Сергей М. ©   (13.07.07 09:02)
> С этого и набо дыло начинать)
Sorry :)


Сергей М.   (2007-07-13 09:02:00) [2]


> Riply ©   (13.07.07 08:59) [17]


С этого и набо дыло начинать)

Конструкции

void *sb;

соответствует

sb: Pointer;


oxffff   (2007-07-13 09:01:00) [3]


> Интересует поле: void *sb;


Ето untype указатель. На Delphi pointer

см. [14] и [16]


Riply   (2007-07-13 08:59:00) [4]

Приведу-ка я часть структуры, чтобы не было ошибки:
struct _ntfs_volume {
union {
 struct ntfs_device *dev; /* NTFS device associated with
        the volume. */
 void *sb; /* For kernel porting compatibility. */
};
char *vol_name;  /* Name of the volume. */
unsigned long state; /* NTFS specific flags describing this volume.
      See ntfs_volume_state_bits above. */

ntfs_inode *vol_ni; /* ntfs_inode structure for FILE_Volume. */
u8 major_ver;  /* Ntfs major version of volume. */
u8 minor_ver;  /* Ntfs minor version of volume. */
u16 flags;  /* Bit array of VOLUME_* flags. */


Интересует поле: void *sb;


Evgeny V   (2007-07-13 08:58:00) [5]

Riply ©   (13.07.07 08:48) [13]

Подозреваю, что в сишной структуре был не просто тип void, а указатель на него void *, что соотвествует Pointer.


Riply   (2007-07-13 08:52:00) [6]

> [12] Anatoly Podgoretsky ©   (13.07.07 08:46)
>По поводу Field - учитывается, только не видать определения типа VOID
VOID - как вся структура, стянуты из С.


oxffff   (2007-07-13 08:50:00) [7]


> Сергей М. ©   (13.07.07 08:43) [10]
>
> > Riply ©   (13.07.07 08:40) [9]
>
>
> void в сях - это "ничто", нечто "безтиповое".
>
> В дан.случае ты можешь применить следующее эквивалентное
> объявление:
>
> Field: record end;


Void нельзя использовать для указания типа.

Может * void?

The void type describes an empty set of values. No variable of type void can be specified — it is used primarily to declare functions that return no values or to declare generic pointers to untyped or arbitrarily typed data.


Riply   (2007-07-13 08:48:00) [8]

> [10] Сергей М. ©   (13.07.07 08:43)
Т.е. в TSuperType поля Field как бы не существует ?


Anatoly Podgoretsky   (2007-07-13 08:46:00) [9]

> Riply  (13.07.2007 07:26:00)  [0]

Это не может быть реализовано, поскольку тут заложена бесконечная рекурсия, правда Дельфи и не позволит это откомпилировать.
Надо применить указатели

PSuperType = ^TSuperType;

По поводу Field - учитывается, только не видать определения типа VOID

И еще одна ошибка, надо убрать второй TYPE


oxffff   (2007-07-13 08:44:00) [10]

to Riply

В каком объявлении компилятор не может выявить Sizeof(твои структуры) поскольку вложенность зациклена.


Сергей М.   (2007-07-13 08:43:00) [11]


> Riply ©   (13.07.07 08:40) [9]


void в сях - это "ничто", нечто "безтиповое".

В дан.случае ты можешь применить следующее эквивалентное объявление:

Field: record end;


Riply   (2007-07-13 08:40:00) [12]

> [8] Сергей М. ©   (13.07.07 08:38)
Угу :)


Сергей М.   (2007-07-13 08:38:00) [13]


> Не могу понять, что такое поле обозначает


Ты сишную декларацию что ли портируешь в Делфи ?


Riply   (2007-07-13 08:35:00) [14]

>[6] {RASkov} ©   (13.07.07 08:26)
Спасибо !
Надо будет только поле добавить:
_Fill: array[0..SizeOf(TSuperType) - SizeOf(Pointer)] of Byte
Для сохранения размера.

А как с Field: VOID быть ?
Объявить как функцию(процедуру) ? Не могу понять, что такое поле обозначает :(


{RASkov}   (2007-07-13 08:26:00) [15]

> [5] Riply ©   (13.07.07 08:24)

type
PSuperType = ^TSuperType;

TPuperType = record
Super: PSuperType;
end;

TSuperType = record
Puper: TPuperType;
Field: VOID;
end;
?


Riply   (2007-07-13 08:24:00) [16]

>[3] {RASkov} ©   (13.07.07 08:22)
>Т.е. именно рекорды нужны?
К сожалению, да.


Сергей М.   (2007-07-13 08:23:00) [17]


> У меня, наверное, Delphi неправильная


Наверно)


{RASkov}   (2007-07-13 08:22:00) [18]

> [2] Riply ©   (13.07.07 08:18)

Сделать вместо record - class и [1]...
Или я что-то вообще не понял [0] :(.... Т.е. именно рекорды нужны?


Riply   (2007-07-13 08:18:00) [19]

>[1] ferr ©   (13.07.07 08:00)
У меня, наверное, Delphi неправильная: не хочет компилить твой вариант :)


ferr   (2007-07-13 08:00:00) [20]

type
TSuperType = record;

type
TPuperType = record
Super: TSuperType;
end;

type
TSuperType = record
Puper: TPuperType;
Field: VOID;
end;

?


Наверх

Титульная страница Поиск, карта сайта Написать письмо