Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];

Вниз

Не могу создать тип file of TMyType   Найти похожие ветки 

 
ZioN   (2004-01-11 14:19) [0]

Уважаемые мастера!
Возникла проблема. Plese, помогите решить.
У меня в модуле определ такой тип:

unit UMyType;

interface
uses
Classes;

type
TZad = record
usl:TStringList;
ans: string;
resh:TStringList;
pod: array[1..3] of string;
resheno:boolean;
end;

type
TMyType = record
Theory:TStringList;
zad:array[1..20] of TZad;
examlpes:array[1..5] of TZad;
end;

implementation
end.

В другом (или в этом - не имеет знчения) модуле определен еще один тип:

unit UMy;

interface
uses
UMyType;

type
TMainType = file of TMyType; // !
implementation
end
.

Не компилирует второй модуль, пишет ошибку:
[Error] Project1.dpr(9): Type "TMyType" needs finalization - not allowed in file type

Что это означает, и как исправить?
Заранее спасибо.


 
alex_***   (2004-01-11 14:37) [1]

To declare a file type, use the syntax

type fileTypeName = file of type

where fileTypeName is any valid identifier and type is a fixed-size type.

!!!FIXED SIZE TYPE (TStringList)

и потом, как ты хочешь сохранять объект TStringList ? Я уж не говорю про строки не заданной длины.


 
Piter   (2004-01-11 14:44) [2]

Читаем HELP:

file cannot contain dynamic arrays, long strings, classes, objects, pointers, variants, other files, or structured types that contain any of these

Правильно, сам подумай - у тебя TMyType содержит объект (точнее, ссылку на него) Theory:TStringList. И как прикажешь компилятору сохранять объект? Методы как сохранять? Код их в ассемблере что ли писать? :)

Так что нельзя сохранять объекты. Да это и глупо, подумай о логике приложения


 
olookin   (2004-01-11 16:43) [3]

пиши в нетипизированный файл...

var f: file

f.blockwrite(zad[0].resheno,Sizeof(boolean));


 
Miwa   (2004-01-11 18:06) [4]

Повторюсь за мастерами.
Как уже заметили, у тебя проблемы с сохранением stringlist, но и не только его. Есть еще string с неопределенной длиной строки. Компилятору надо знать размер твоего TZad на стадии компиляции, а лист или стринг - это динамические структуры. Подумай, не лучше ли будет сохранять все это дело в базе данных а если нет - тогда задай конкретные величины полей, например:

type
str = string[64];
TZad = record
usl:array [1..3] of str;
ans:str;
resh:array [1..3] of str;
pod:array[1..3] of str;
resheno:boolean;
end;

Правда, в этом случае придется писать много лишней информации, но если нельзя уже на этапе проэктирования сказать, какие у тебя данные и сколько их, то чтобы не писать лишнее в файл - тогда только РБД.



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

Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.015 c
6-72852
Andersen
2003-11-20 15:45
2004.01.23
Удаленный коннект к SQLServerу


4-72991
independant
2003-11-18 18:49
2004.01.23
Определение текущего времени.


3-72674
AndrewK
2003-12-25 13:37
2004.01.23
ОЧЕНЬ БОЛЬШОЙ ЗАПРОС


14-72936
MagaSoft
2004-01-03 21:24
2004.01.23
Кто как или расстановка форм.


1-72789
AlexandrKu
2004-01-13 09:16
2004.01.23
где найти dcloffice2k50.bpl ?





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