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

Вниз

Объявление структур по-русски :)   Найти похожие ветки 

 
Riply ©   (2007-07-13 07:26) [0]

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

type
TPuperType = record
 Super: TSuperType;
end;

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


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


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

type
TSuperType = record;

type
TPuperType = record
Super: TSuperType;
end;

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

?


 
Riply ©   (2007-07-13 08:18) [2]

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


 
{RASkov} ©   (2007-07-13 08:22) [3]

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

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


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


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


Наверно)


 
Riply ©   (2007-07-13 08:24) [5]

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


 
{RASkov} ©   (2007-07-13 08:26) [6]

> [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:35) [7]

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

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


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


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


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


 
Riply ©   (2007-07-13 08:40) [9]

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


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


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


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

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

Field: record end;


 
oxffff ©   (2007-07-13 08:44) [11]

to Riply

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


 
Anatoly Podgoretsky ©   (2007-07-13 08:46) [12]

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

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

PSuperType = ^TSuperType;

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

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


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

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


 
oxffff ©   (2007-07-13 08:50) [14]


> Сергей М. ©   (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:52) [15]

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


 
Evgeny V ©   (2007-07-13 08:58) [16]

Riply ©   (13.07.07 08:48) [13]

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


 
Riply ©   (2007-07-13 08:59) [17]

Приведу-ка я часть структуры, чтобы не было ошибки:
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;


 
oxffff ©   (2007-07-13 09:01) [18]


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


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

см. [14] и [16]


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


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


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

Конструкции

void *sb;

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

sb: Pointer;


 
Riply ©   (2007-07-13 09:05) [20]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.08.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
1-1181039051
pohil
2007-06-05 14:24
2007.08.12
Изменение видеорежима


2-1184093695
Ivolg
2007-07-10 22:54
2007.08.12
Вывести Hint в определенных координатах


8-1162927570
Areat
2006-11-07 22:26
2007.08.12
Помогите, кто знает!


1-1180699210
DevilDevil
2007-06-01 16:00
2007.08.12
Frame.OldCreateOrder,PixelsPerInch,TextHeight. Откуда?


8-1162985232
OlDirtyBastard
2006-11-08 14:27
2007.08.12
Label над точками в TChart