Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.04 c
3-1177412617
DelphiN!
2007-04-24 15:03
2007.08.12
Очень долгий Insert в таблицу БД FireBird 1.5


2-1184574350
Romikremind
2007-07-16 12:25
2007.08.12
Открытие БД Access


15-1182677885
tesseract
2007-06-24 13:38
2007.08.12
ММП - пора наконец!


11-1167112012
Fantasy
2006-12-26 08:46
2007.08.12
http://www.kolnmck.ru/ не работает! не открывается!


6-1167880831
LFRT
2007-01-04 06:20
2007.08.12
Как с помощью сокетов получить от сервера имя файла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский