![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объявление структур по-русски :)
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;
?