Форум: "Основная";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];
ВнизВариантные записи в ObjectPascal Найти похожие ветки
← →
vidd (2003-04-29 11:44) [0]Подскажите, пожалста, как использовать вариантные записи.
Например
type
TMyRec = record
select AType: byte of
1: (A: integer);
2: (B: double);
3: (C: string);
end;
var
AVar: TMyRec;
И чего я теперь могу делать с AVar?
← →
Skier (2003-04-29 11:52) [1]А такую запись компилятор пропускает ?
TMyRec = record
select AType: byte of
1: (A: integer);
2: (B: double);
3: (C: string);
end;
← →
vidd (2003-04-29 11:57) [2]ну это я конечно перебрал...
пусть будэ:
type
TMyRec = record
case AType: byte of
1: (A: integer);
2: (B: double);
end;
← →
Skier (2003-04-29 12:01) [3]В вариантных записях используется
общая память для вариантных частей.
Т.е.
var
AVar: TMyRec;
begin
AVar.AType := 1;
//работаем с полем AVar.A
AVar.AType := 2;
//работаем с полем AVar.B
end;
← →
vidd (2003-04-29 12:06) [4]ага
значит надо таки указывать AType...
а я пытался сразу напрямую AVar присваивать значения
на что получал not enough actual parameters...
ну что-ж, спасибо за разьяснение
← →
gg (2003-04-29 12:17) [5]Вы чего, надо работать не с AType, а непосредственно с A и B. т.е.
var
AVar: TMyRec;
begin
AVar.A := 1;
//работаем с полем AVar.A
AVar.B := 2;
//работаем с полем AVar.B
end;
точно также как и с обычной записью.
type
TMyRec = record
select AType: byte of
1: (A: integer);
2: (B: double);
3: (C: string);
end;
такое компилятор тоже поймет вполне нормально
← →
Skier (2003-04-29 12:23) [6]>gg
Мда, батенька...
← →
vidd (2003-04-29 12:25) [7]на string таки ругаецца:
[Error] vdRealFunc.pas(34): Type "String" needs finalization - not allowed in variant record
← →
Skier (2003-04-29 12:29) [8]>vidd
если хочешь String в вариантных записях, то
1) используй ShortString
2) используй указатель на строку 3: (C: PString); , где
PString = ^String Но в этом случае внимательно следи на
выделением и освобождением памяти !
← →
REA (2003-04-29 12:30) [9]А зачем циферки 1 2 3, если они не используются? Почему не 5 8 и 3112?
← →
Smithson (2003-04-29 12:32) [10]Циферки любые могуть быть.
И все-таки без вских AType все прекрасно компилиться (Delphi 5).
Только что специально попробывал.
← →
Anatoly Podgoretsky (2003-04-29 13:04) [11]REA © (29.04.03 12:30)
3112 нельзя
← →
REA (2003-04-29 14:58) [12]Да понятно что нельзя, но непонятно зачем оно вообще?
Используются ведь для адресации только идентификаторы.
Может компилятору так легче или это чтобы пользователь сам не забыл зачем ему вариантная запись. Теряюсь в догадках.
В Си ведь просто union без всяких 1 2 3.
← →
Anatoly Podgoretsky (2003-04-29 15:00) [13]Оно не нужно, но синтаксис такой, претензии Вирту
← →
Skier (2003-04-29 15:07) [14]>Anatoly Podgoretsky
Хочу уточнить (для самообразования) : а в стандартном Паскале
Никлауса Вирта были вариантные записи ?
← →
Внук (2003-04-29 15:23) [15]type
TMyRec = record
case AType: byte of
1: (A: integer);
2: (B: double);
end;
Здесь введено AType. Его можно (но необязательно) устанавливать, чтобы пользователь знал, что в данный конкретный момент дежит в вариантной части.
if AVar.AType=1 then //работаем с Ineteger иначе с Double
Когда это несущественно, можно имя тэга опустить:
TMyRec = record
case byte of
1: (A: integer);
2: (B: double);
end;
Здесь нельзя определить, что же сейчас лежит в вариантной части AVar.
← →
Calm (2003-04-29 17:10) [16]
> Хочу уточнить (для самообразования) : а в стандартном Паскале
> Никлауса Вирта были вариантные записи ?
Конечно нет. В стандартном паскале вообще мало чего было.
Borland Pascal отличается от изначального паскаля Вирта, как BP от Delphi6 (с D7 не работал, не знаю :)).
← →
Skier (2003-04-29 17:14) [17]>Calm
> Конечно нет. В стандартном паскале вообще мало чего было.
Я это предполагал...
← →
Anatoly Podgoretsky (2003-04-29 17:45) [18]Skier © (29.04.03 15:07)
Не помню, но если не были, то претензии к обскураторам
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c