Форум: "Начинающим";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
ВнизОбъявление структур по-русски :) Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.049 c