Форум: "Основная";
Текущий архив: 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.007 c